-
函数作为返回值
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
一个求和函数:
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,并且调用的这个函数的时候,才希望同时执行装饰器这个函数。在这里,装饰器函数就用到了函数延迟执行的特性,所以装饰器函数是闭包函数来实现的,正是这个原因