python内置函数匿名函数递归
Posted 鵬程萬裏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python内置函数匿名函数递归相关的知识,希望对你有一定的参考价值。
python3--内置函数
内置函数:
截止到python 3.6.2 版本,现在python一共提供了68个内置函数;即python提供给你直接可以拿来使用的所有函数。
上面便是内置函数列表,按首字母排序,难免看起来混乱无序,不便于记忆;
幸好课上萌萌哒景女神提供了总结归纳好的思维导图,把这些函数分成了6大类。
由于学习进度原因,此处只写标红的四大块(56个方法)~
作用域相关:
内置函数详解:http://www.runoob.com/python/python-built-in-functions.html
1.abs() 求绝对值
2.all() 如果 iterable 的所有元素都为真(或者如果可迭代为空),则返回 True
3.any() 如果 iterable 的任何元素为真,则返回 True
。如果iterable为空,则返回 False
4.callable() 如果 object 参数出现可调,则返回 True
,否则返回 False
5.divmod() 以两个(非复数)数字作为参数,并在使用整数除法时返回由商和余数组成的一对数字。对于混合操作数类型,二进制算术运算符的规则适用。对于整数,结果与 (a//b,a%b)
相 同。对于浮点数,结果为 (a%b,q)
,其中q 通常为 math.floor(a/b)
,但可以小于1
6.enumerate() 参数必须是可迭代对象,函数运行结果得到一个迭代器,输出元素及对应的索引值
7.eval() 把字符串中的提取出来执行
8.frozenset() 不可变集合,frozenset()定义的集合不可增删元素
9.globals() 返回表示当前全局符号表的字典。这始终是当前模块的字典(在函数或方法内部,这是定义它的模块,而不是从其调用它的模块)
10.round() 对参数进行四舍五入
11.sorted() 排序,不改变原列表
l=[1,2,4,9,-1] print(sorted(l)) #从小到大 print(sorted(l,reverse=True)) #从大到小
12.zip() 拉链函数
它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)
a=[1,2,3] b=[\'a\',\'b\',\'c\'] print(list(zip(a,b)))#------->[(1, \'a\'), (2, \'b\'), (3, \'c\')]
#因为在Python3中zip函数生成的是一个可迭代对象,所以,加一个list可以方便的打印出来,否则打印的是一个对象
加一个*就可以解压
a=[1,2,3] b=[\'a\',\'b\',\'c\'] c=list(zip(a,b)) d=zip(*c) print(list(d))#[(1, 2, 3), (\'a\', \'b\', \'c\')]
13.max()
返回可迭代的最大项或两个或更多参数中最大的一个。
如果提供了一个位置参数,它应该是一个 iterable。返回迭代中的最大项。如果提供了两个或多个位置参数,则返回最大的位置参数。
max()可以指定key(也就是指定要比较的部分)
14.map() 映射
返回一个迭代器,它应用 function 到 iterable 的每个项目,产生结果
l=[1,2,3,4] m=map(lambda x:x**2,l) print(list(m)) ----->[1, 4, 9, 16]
15.reduce() 合并
from functools import reduce
def multi(x,y):
return x*y
a = reduce(multi,[1,2,3,4,5])
print(a)#120 五个数相乘的结果
16.filter() 过滤 保留布尔值为True的元素
names=[\'a_sb\',\'b_sb\',\'c_sb\',\'d\'] print(list(filter(lambda name:name.endswith(\'_sb\'),names)))--->[\'a_sb\', b_sb\', \'c_sb\']
详细的内置函数介绍可以参照以下:https://www.rddoc.com/doc/Python-3.6.0/library/functions/
二、匿名函数
匿名函数就是不需要显示的指定函数
#这段代码 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n:n**n print(calc(10))
l=[3,2,100,999,213,1111,31121,333] print(max(l)) dic={\'k1\':10,\'k2\':100,\'k3\':30} print(max(dic)) print(dic[max(dic,key=lambda k:dic[k])])
# 1 文件内容如下,标题为:姓名,性别,年纪,薪资 # # egon male 18 3000 # alex male 38 30000 # wupeiqi female 28 20000 # yuanhao female 28 10000 with open(\'b.txt\',encoding=\'utf-8\') as f: l1=[{\'name\':line.split()[0],\'sex\':line.split()[1],\\ \'age\':line.split()[2],\'salary\':line.split()[3]}for line in f] # 4 根据1得到的列表,将每个人的信息中的名字映射成首字母大写的形式 l4=[i[\'name\'] for i in l1] print(list(map(lambda item:item.capitalize(),l4))) # 5 根据1得到的列表,过滤掉名字以a开头的人的信息 l4=[i[\'name\'] for i in l1] print(list(filter(lambda name:not name.startswith(\'a\'),l4)))
三、递归调用
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
递归有两个阶段
阶段一:递推
阶段二:回溯
以上是关于python内置函数匿名函数递归的主要内容,如果未能解决你的问题,请参考以下文章