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/
二、匿名函数
匿名函数就是不需要显示的指定函数
1 2 3 4 5 6 7 8 | #这段代码 def calc(n): return n * * n print (calc( 10 )) #换成匿名函数 calc = lambda n:n * * n print (calc( 10 )) |
1 2 3 4 5 6 7 8 | 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 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)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
递归有两个阶段
阶段一:递推
阶段二:回溯
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用