python中闭包
函数作为返回值
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
一个求和函数:
1 def sum(x,y):2 return x+y
但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数!
1 def lazy_sum():2 def sum(x,y):
3 return x+y
4 return sum
5
6 new_sum=lazy_sum()
new_sum不会求和,而是得到了这个求和的函数。当你需要用到求和的时候,调用就行了:new_sum(1,2),这种函数延迟执行做法的意义是什么呢?可以参考下python里的经典语法糖,装饰器
1 def timethis(func):2 def wrapper(*args,**kwargs):
3 start=time.time()
4 result=func(*args,**kwargs)
5 end=time.time()
6 print(func.__name__,end-start)
7 return result
8 return wrapper
9
10 @timethis
11 def countdown(n):
12 while n>0:
13 n-=1
14
15 countdown(100000000)
@timethis作为装饰器,不能是每次我定义新函数的时候,就执行一次它,而是我定义好这个新函数countdown,并且调用的这个函数的时候,才希望同时执行装饰器这个函数。在这里,装饰器函数就用到了函数延迟执行的特性,所以装饰器函数是闭包函数来实现的,正是这个原因
以上是 python中闭包 的全部内容, 来源链接: utcz.com/z/386613.html