Python基础知识5-递归函数、生成器
函数执行流程*

递归Recursion




递归的性能




递归总结

递归练习:

#
def fac(n):
if n==1:
return n
return n*fac(n-1) def fac1(n, f=1):
if n == 1:
return f
f *= n
return fac1(n - 1, f)
#
def revert1(n,lst=[]):
lst.append(n%10)#可以考虑用divmod()函数
return lst if n//10==0 else revert1(n//10,lst) def revert1(num,tarhet=[]):
if str(num):
target.append(num[len(num)-1])
revert1(num[:len(num)-1])
return target
#
ef peach1(days=10):
if days==1:
return 1
return (peach1(days-1)+1)*2 def peach2(days=1):
if days==10:
return 1
return (peach2(days+1)+1)*2
匿名函数




生成器***




生成器应用




yield from


练习:

#1.#利用isinstance判断是否是字典,是的继续递归,否则合并key,赋值新字典
source = {'a': {'b': 1, 'c': 2}, 'd': {'e': 3, 'f': {'g': 4}}}
# # target = {'a.b': 1, 'd.f.g': 4, 'd.e': 3, 'a.c': 2}
target={}
def func(src,targetkey=''):
if not isinstance(src,dict):
return None
for k,v in src.items():
if isinstance(v,dict):
func(v,targetkey=targetkey+k+'.')
else:
target[targetkey+k]=v

#参考:https://www.cnblogs.com/bolenzhang/p/8366365.html
alphabet=b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" #参照Base64编码表
def base64(src):
ret = bytearray()
length = len(src)
# r记录补0的个数
r = 0
for offset in range(0, length,3):
if offset + 3 <= length:
triple = src[offset:offset+3]
else:
triple = src[offset:]
r = 3 - len(triple)
triple = triple + '\x00'*r print(triple.encode(),r)
#int.from_bytes函数参考:https://blog.csdn.net/Clovera/article/details/79293108
b = int.from_bytes(triple.encode(), 'big')#bytes类型的变量x,转化为十进制整数
print(b)
#01100001
for i in range(18, -1, -6):
if i == 18:
index = b >> i
else:
index = b >>i & 0x3F #十六进制3f等于十进制63,二进制表示为 0011 1111,因为我们是按6位取
ret.append(alphabet[index]) for i in range(1,r+1):
ret[-i] = 0x3D
return ret print(base64('abcd')) #ASCII码与字符相互转换
ord()函数:它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值。
chr()函数:在 range(256)内的(就是0~255)整数作参数,返回当前整数对应的ASCII字符。

#3#动态规划方法!
str1 = 'ahcdef'
str2 = 'hcadef'
def maxSubstring(str1,str2):
if not str1 or not str2:
return None
length1 = len(str1)
length2 = len(str2)
#建立辅助二维数组
arr = [[0 for i in range(length1+1)]for j in range(length2+1)]
p = 0#用于记录最大长度的下标
maxlength = 0#记录最大的子串长度 for i in range(length1):
for j in range(length2):
if str1[i] == str2[j]:
arr[i+1][j+1] = arr[i][j] + 1
if arr[i+1][j+1]>maxlength:
maxlength = arr[i+1][j+1]
p = i+1
return str1[p-maxlength:p],maxlength
Python基础知识5-递归函数、生成器的更多相关文章
- 1.17 Python基础知识 - 迭代器和生成器初识
可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象. 列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表 示例代码: [ i ** 2 for i in range(10) ] ...
- python基础知识---迭代器、生成器、装饰器
一.迭代器 二.生成器 http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html def func(): #定义生成器,和普通函数的区别是 ...
- Python基础知识总结笔记(四)函数
Python基础知识总结笔记(四)函数python中的函数函数中的参数变量作用域偏函数PFA递归函数高阶函数BIFs中的高阶函数匿名函数lambda闭包Closure装饰器Decorator函数式编程 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- python基础知识(二)
以下内容,作为python基础知识的补充,主要涉及基础数据类型的创建及特性,以及新数据类型Bytes类型的引入介绍
- python 基础知识(一)
python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...
- python基础知识讲解——@classmethod和@staticmethod的作用
python基础知识讲解——@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- python 爬虫与数据可视化--python基础知识
摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...
- python基础知识小结-运维笔记
接触python已有一段时间了,下面针对python基础知识的使用做一完整梳理:1)避免‘\n’等特殊字符的两种方式: a)利用转义字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...
随机推荐
- Android破解——支付宝内购破解方法总结
支付宝破解三种方式: 想学一下支付宝内购的相关知识,但是搜索了论坛,发现但是没有相关的帖子,于是便是打算自己来写一篇总结 一.9000的十六进制代码修改 搜索9000的十六进制,也就是搜索0x2328 ...
- fork/join概述
Fork/Join是java 7 解决并发问题的解决方案. 是 java内部并行框架.核心思想分别为拆分任务和结果合并,在核心思想外,为了提高cpu多核的利用率,设计了工作窃取算法,并将工作队列设计为 ...
- linux_shell 编程学习-初识she'll
一.she'll编程规范 1.she'll脚本命名一般为英文的大小写; 2.不能用特殊符号.空格来命名; 3.she'll脚本后缀以.sh结尾; 4.不建议she'll命名为纯数字,一般以脚本功能命名 ...
- 广州.NET微软技术俱乐部休闲活动 - 每周三五晚周日下午爬白云山活动
基于如下原因: 正如我们在<广州.NET微软技术俱乐部与其他技术群的区别>里面提到的:有人在活动中表达"少了一点自由交流的时间, 我们来自五湖四海, 希望多点时间彼此认识&quo ...
- 键盘上的"整蛊专家",如何防止短信轰炸机
"短信轰炸机",是别人通过爬虫或者其他抓取手段在网路上收集那些公司平台短信业务接口的一个集成程序,可能只需要输入一个手机号,对方一整天都会收到各大平台的注册或提醒短信,就是手机在那 ...
- iOS----------教你如何使用 GitHub Desktop
1.先创建一个工程项目Test 2.创建一个仓库Repository 3.提交到master(记得写标题) 4.推送到github上 5.创建仓库Respository成功
- Spring 事务与脏读、不可重复读、幻读
索引: 目录索引 参看代码 GitHub: 1.Spring 事务 2.事务行为 一.Spring 事务: Spring 的事务机制是用统一的机制来处理不同数据访问技术的事务处理. Spring 的事 ...
- sed 查找文件的某一行内容
1,查找文件text中第三行的内容 命令: sed -n '3p' text 2,查找文件text中第二行到第四行的内容 命令: sed -n '2,4p' text
- Maven的简单使用
Maven使用 在官网下载maven: http://maven.apache.org/download.cgi 解压到D盘(位置随便) 配置环境变量 打开dos窗口,检测是否成功,出现如下画面表示配 ...
- vue li click
<ul> <li @click="mechanisms(1)">AAAAA</li> <li @click=" ...