三元表达式:
1.我们常用的
def max2(x,y)
if x> y:
return x
else:
return y
res=max2(10,11)
print(res)
2.三元表达式
x=10
y=11
res=x if x>y else y
print(res)
三元表达式仅应用于:
1.条件成立返回一个值
2.条件不成立返回一个值
def max2(x,y)
return x if x> y else y
print(max2(10,11))
函数递归
函数的递归调用,在函数调用的过程中,又直接或间接的调用了函数的本身
直接调用:
def foo()
print('from foo')
foo()
foo()
间接调用:
def bar():
print('from bar')
foo()
def foo():
print('form foo')
bar()
foo()
递归分为两个阶段:
1.回溯:一定要满足某种条件结束回溯,否则无限递归
2.递推
def age(n):
if n==1:
return 18
return age(n-1)+2
print(age(5))
总结:1.递归一定要有一个明确的结束条件
2:每进入下一次递归,问题的规模都应该减少
3.在python中没有尾递归优化
匿名函数:没有名字,用一次丢一次,不会单独使用
f=lambda x,n:x**n
print(f(2,3))
强调:
1.匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的
2.匿名函数的参数规则、作用域关系与有名函数是一样的
3.匿名函数的函数体通常应该是一个表达式,该表达式必须要有一个返回值
lambda x,y,z: x+y+z
lambda匿名函数的应用:
max min sorted
salaries={
'egon':3000,
'alex':1000000,
'wupeiqi':10000,
'yuanhao':2000
}
求工资最高的那个人是谁
print(max(salaries.key=lambda x:salaries[x]))
求工资最低的那个人是谁
print(min(salaries.key=lambda x:salaries[x]))
把薪资字典,按照薪资的高低排序
nums=[1,4,20,11]
nums=sorted(nums) #默认是升序
print(nums)
lambda与map filter reduce
nums=[1,2,3,4,5,6]
res=map(lambda x:x**2,nums)
print(list(res))
names=['alex','egon']
res=map(lambda x:x+'_NB',names)
print(list(res)
from functools import reduce
res=reduce(lambda x,y:x+y,range(1,101),112)
res=reduce(lambda x,y:x+y,range(1,101)
print(res)
filter
ages=[18,119,29,45,1]
res=filter(lambda n:n>=30,ages)
print(list(res))
列表生成式:用于数据量少
l=[]
for i in range(100):
l.append('egg%s' %i)
print(1) # 常规的方法
l=['egg%s' %i for i in range(100)] #列表生成式
l=['egg%s' %i for i in range(100) if i>10] #列表生成式升级版,加判断
print(l)
生成器表达式:用于数据量较大
l=('egg%s' %i for i in range(100) if >10)
print(next(l))