高阶函数
特点
- 接收一个或多个函数作为参数;
- 将函数作为返回值。
示例
- 一个函数根据不同的需求实现不同的功能
lst=list(range(10))
def f1(i):
if i%2==0:
return True
def f2(i):
if i>5:
return True
def f(func,lst):
s=[]
for i in lst:
if func(i):
s.append(i)
return s
print(f(f1,lst))
#[0, 2, 4, 6, 8]
print(f(f2,lst))
#[6, 7, 8, 9]
- 当我们将一个函数作为参数时,实际上是将指定代码传入函数。
思考:可否传入不定长参数,且参数为函数,例如判断 f1 and f2
匿名函数(lambda函数表达式)
-语法: lambda 参数列表 : 返回值
def sum(a,b):
return a+b
h=lambda a,b : a+b
print(h(50,60))
#110
闭包
- 将某些变量放到函数内部,变成局部变量,从而不会被修改
def bibao():
s=[]
def ss():
s.append(len(s)+1)
print(s)
return ss
l=bibao()
l()
l()
l()
#[1]
#[1, 2]
#[1, 2, 3]
函数bibao只是为了将变量s变成局部变量
作为对比:
s=[]
def ss():
s.append(len(s)+1)
print(s)
ss()
ss()
ss()
#[1]
#[1, 2]
#[1, 2, 3]
装饰器
留白