三元运算、递归、匿名函数
三元运算
三元运算:就是if ...else的语法糖,但是前提if和else都要存在且都只有一条语句。
例 a=20
b=30
re= a if a>b esle b #求最大值
print(res)
上面的结果,也可以和条件没有直接性的关系。
推导式
①dic={‘a’:1,‘b’:2,‘c’:3}
res=[(k,v)for k,v in dic.items()] #列表推导式
print(res) # [(‘a’,1),('b',2),(‘c’,3)]
②res=((k,v)for k,v in dic.items())
print(res) #得到的是一个生成器,与列表不同,因为原元组是不可变得,所以得到的是一个生成器,要想得到一个元组可以tuple(res)转换后输出
③ls= [(‘a’,1),('b',2),(‘c’,3)]
res={k:v for k,v in ls} #字典推导式
print(res)
同理可以把可迭代的对象推导成想要的类型
递归
递归的本质就是自己调用自己(函数的自我调用,循环调用可以是直接也可以是间接的)
ps:在调用函数的时候后会产生局部的名称空间,占用内存,python的内存管理机制会防止其无限制占用内存,对函数的递归做了最大的层级限制。
import sys
sys.getrecursionlimit()
sys.getrecursionlimit(2000)#提高限制到2000,默认为1000
递归的调用阶段
递归:回溯和递推
①回溯:询问答案的过程
就是从外层一层一层的递归调用下去,回溯阶段必须有明确的结束条件,每进入下一次递归,问题的规模应该有所减少。
②递推:推出答案的过程
递推就是由内而外一层一层结束递归。
注:python中没有尾递归优化(就是return自己,并不会减少占用)
匿名函数
匿名就是没有名字的函数,一次性使用,随时定义(也可以将匿名函数赋值给一个变量名,等同于有名字的函数,但是就违背了初衷)通常配合内置函数使用。