返回函数
函数作为返回值:
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
比如求和函数:
def func(*args):
def sum():
n=0
for i in args:
n = n+i
return n
return sum
调用func(),返回的是sum这个函数对象,
分别用func()传两次相同的参数:
s1=func(1,2,3,4,5)
s2=func(1,2,3,4,5)
s1=f2>>>False
说明虽然传了两次相同的参数,返回的函数对象并不一样
想要获得最终的结果,必须调用返回的函数对象,
sum()>>>15
闭包(重点):
上例中,我们在函数func中又定义了函数sum,并且,内部函数sum可以引用外部函数func的参数和局部变量,当func返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。(内部的可以引用外部的参数和变量,外部的不能引用内部的参数和变量)
s1()和s2()的调用结果互不影响。
注意:返回的函数并没有立刻执行,而是直到调用了s()才执行。
返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量
小结
一个函数可以返回一个计算结果,也可以返回一个函数。
返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。