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' ...
随机推荐
- PhpStudy升级MySQL5.7
PhpStudy2017集成环境中的mysql数据库的版本默认是mysql5.5,下面是PhpStudy升级数据库到mysql5.7的方法: 1:备份当前数据库数据,可以导出数据库文件,作为备份,我这 ...
- C# 操作Word 中的OLE——插入、编辑、读取 OLE
概述 OLE,Object Linking and Embedding,即对象连接与嵌入.我们在设计程序时,OLE可以用来创建复合文档,把文字.声音.图像.表格.应用程序等类型的信息组合在一起,在Wo ...
- java8 Stream操作
Stream操作详解:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/#icomments
- Linux基础:CentOS安装python3.7
1.下载python3 wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz 2.解压 [root@mycentos ~]# ta ...
- 2019/1.6 Javascript Cookie
cookie 就是一个1存放数据的东西,存储量很小(只有4KB),存放在客户端和应用设备上. 应用场景 用户注册,用户登录,购物车 chrome浏览器计算机存放cookie的位置 C:\Users\A ...
- Fundebug前端JavaScript插件更新至1.7.1,拆分录屏代码,还原部分Script error.
摘要: BUG监控插件压缩至18K. 1.7.1拆分了录屏代码,BUG监控插件压缩至18K,另外我们还原了部分Script error,帮助用户更方便地Debug.请大家及时更新哈~ 拆分录屏代码 从 ...
- React的组件模式
组件是 React 的核心,因此了解如何利用它们对于创建优秀的设计结构至关重要. 什么是组件 根据 React 官网的介绍,"组件让你可以将 UI 分割成独立的.可重用的部分,并独立管理每个 ...
- 后端开发者的Vue学习之路(二)
目录 上篇内容回顾: 数据绑定 表单输入框绑定 单行文本输入框 多行文本输入框 复选框checkbox 单选框radio 选择框select 数据绑定的修饰符 .lazy .number .trim ...
- 请不要在广州.NET俱乐部群里谈郑智话题,谢谢!
收到私聊说代码无国界,但是程序员是有国界的,程序员也有关心国家大事的权力! 我是极度赞同“代码无国界,但是程序员是有国界的,”我也极度赞同程序员也要爱国. 因为我们新兴县六祖镇叶氏家族就有四位爱国 ...
- Netty学习笔记(三) 自定义编码器
编写一个网络应用程序需要实现某种编解码器,编解码器的作用就是讲原始字节数据与自定义的消息对象进行互转.网络中都是以字节码的数据形式来传输数据的,服务器编码数据后发送到客户端,客户端需要对数据进行解码, ...