返回函数
当函数作为返回值返回的时候,称这个函数为返回函数
在python中除了可以接受函数作为参数外,还可以把函数作为结果值返回.
需求:实现一个可变参数的求和.通常是这么定义的:
def calc_sum(*args):
sum = 0
for i in args:
sum += i
return sum
现在需求有变,现在我不需要立即求和,而是在后面的代码中,根据需要再进行计算,这时候,我们可以不返回求和的结果,而是返回求和的函数.
def lazy_sum(*args):
def calc_sum():
sum = 0
for i in args:
sum += i
return sum
return calc_sum
当调用lazy_sum()时,返回的并不是求和的结果而是求和的函数
>>> f = lazy_sum(1, 2, 3, 4)
>>> f
<function lazy_sum.<locals>.calc_sum at 0x101b61598>
这时候调用f时,才真正计算求和的结果
>>> f()
10
像如上的函数,我们在函数lazy_sum中又定义了函数calc_sum,并且内部函数calc_sum可以使用lazy_sum的参数和局部变量,当lazy_sum返回函数calc_sum时,相关的参数以及变量都保存在返回的函数中,这种称为闭包
注意:当调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数.