一、三元运算符
就是if.....else..... 语法糖 前提:if和else只有一条语句
#原始版 cmd=input('cmd') if cmd.isdigit(): print('1') else: print('2') 简化版: cmd=input('cmd') print('1') if cmd.isdigit() else print('2') #求两个数的最大值 a=20 b=30 res=a if a>b else 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(tuple(res)) #字典推导式 ls=[('a',1),('b',2),('c',3)] res={k:v for k,v in ls} print(res) #{'a':1,'b':2,'c':3}
#案例 #将range()推导为列表 res_ls=[arg for arg in range(10)] print(res_ls) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #将range()推导为字典 res_dic={'a';arg for arg in range(10)} print(res_dic) #{‘a’:9} #key值具有唯一性,所以只生产最后一个key值 res_dic={arg:1 for arg in range(10)} print(res_dic,type(res_dic)) #{0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1} <class 'dict'> #在此,需要纠正一下,key值不一定是字符串,存在字符串是用来对value起描述作用 #迭代出可解压为的单列容器可以推导出字典 res-dic={v:k for k,v in enumerate('abc')} print(res) #{'a': 0, 'b': 1, 'c': 2}
三、递归
前提: 回溯到一个有具体结果的值,开始递推 回溯与递归的条件要有规律 递归的本质:函数的自我调用 import sys sys.setrecursionlimit(200) #手动设置递归深度 print(sys.getrecursionlimit()) #默认1000
# 询问第一个人年龄,回溯条件 小两岁,第五个人说出自己的年龄,推导出第一个人年龄 # 条件:下一个人的年龄比这个人年纪大两岁 def age(num): if num==1: return 58 temp=age(num-1)-2 return temp res=age(5) print(res) #求一个数的阶乘 def factorial(num): if num==1: return 1 temp=num*factorial(num-1) return temp res=factorial(5) print(res) #120
四、匿名函数
匿名函数:没有函数名的函数 语法组成:lambda 参数列表:一个返回值表达式 没有函数名,没有函数体,只有一个返回值 关键字:lambda 参数列表省略() 返回值return关键字也被省略 f=lambda x,y:(x+y,x-y) print(f(10,20)) #应用场景 # 1.匿名函数函数地址可以被一个变量接受,该变量就可以作为函数名来使用,但就违背了匿名初衷 # 2.结合内置函数来使用: 内置函数某些参数需要一个函数地址, # -- 可以赋值一个有名函数名,也可以直接赋值匿名函数 res=max(10,20,30,40) print(res) #40 res=max({10,20,30,40}) print(res) #40