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,并且调用的这个函数的时候,才希望同时执行装饰器这个函数。在这里,装饰器函数就用到了函数延迟执行的特性,所以装饰器函数是闭包函数来实现的,正是这个原因
全世界的程序员们联合起来吧!
原文地址:https://www.cnblogs.com/chaojiyingxiong/p/14818108.html