deffun(n):if n %2==0:returnTrue
list1 =[1,2,3,4,5,6,7,8,9,10]deffun1(f):
list2 =[]for i in list1:if f(i):
list2.append(i)return list2
a = fun1(fun)print(a)
2.匿名函数
# lambda
res =lambda a,b:a**b
print(res(2,5))
res =(lambda a, b: a + b)(1,2)print(res)# filter()
list1 =[1,2,3,4,5,6,7,8,9,10]deffun(n):if n %2==0:returnTrueprint(list(filter(fun,list1)))
3.闭包
将函数作为返回值也是高阶函数我们也称为闭包
闭包的好处
通过闭包可以创建一些只有当前函数能访问的变量
可以将一些私有数据藏到闭包中
行成闭包的条件
函数嵌套
将内部函数作为返回值返回
内部函数必须要使用到外部函数的变量 例子:
deffun(n1):deffun1(n2):
r = n1 + n2
print(r)return fun1
a = fun(2)
a(4)
4.装饰器
装饰器是一个特殊的闭包,符合闭包的三大构成条件。
defadd(a, b):return a+b
defqiu():print(123)deffun(fn,*args,**kwargs):print('STAET')
r = fn(*args,**kwargs)print('EDN')return r
print(fun(add,5,7))
# 装饰器语法糖的写法deffun(fn):deffun1(*args,**kwargs):print('STAET')
r = fn(*args,**kwargs)print('EDN')return r
return fun1
@fun
defqiu():print(123)
qiu()
@fun
defadd(a, b):return a + b
print(add(1,2))
作业
# 1. 请使用装饰器实现已存在的函数的执行所花费的时间。import time
defdce_out(fn):defdce_inner(*args,**kwargs):
time_start = time.time()
r = fn(*args,**kwargs)
time_end = time.time()print(time_end - time_start)return r
return dce_inner
@dce_out
defadd(a,b):
time.sleep(1)return a*b
d = add(6,2)print(d)
@dce_out
defli():
i =0while i <10000:
i +=1
time.sleep(0.0)return i
li()
@dce_out
deftest():print("test")
time.sleep(1)
test()
1. 高阶函数接收函数作为参数,或者将函数作为返回值返回的函数就是高阶函数例子: def fun(n): if n % 2 == 0: return True list1 = [1,2,3,4,5,6,7,8,9,10] def fun1(f): list2 = [] for i in list1: if f(i): list2.append(i) return list2 a = f