5:返回函数 (函数作为返回值)
高阶函数不仅仅可以接受函数作为参数 ,还可以把函数作为结果值返回
>>>def lazy_sum(*args)
def sum():
ax=0
for n in args:
ax=ax+n
return ax
return sum
>>>f =lazy_sum(1,3,5,7,9)
>>>f
<function sum at 0x238dada>
>>>f()
25
函数lazy_sum中又定义了sum并且内部函数sum 有引用了lazy_sum 的参数和局部变量 当lazy_sum 返回函数sum时 相关参数和变量都保存在返回的函数中 这种程序称为 “闭包”
闭包:当一个函数返回一个函数后,其局部变量还被新的函数引用。 需要注意的是 返回的函数没有立即执行 而是直到调用了f()之后才开始执行
>>>def count():
fs=[]
for i in range(1,4):
def f():
return i*i
fs.append(f)
return fs
>>>f1,f2,f3=count()
>>>f1()
9
>>>f2()
9
>>>f3()
9
多返回值 返回了一个list 然后将这个list 中的三个函数分别给了f1 f2 f3 因为调用的时候才开始执行。 所以执行的时候i 都已经是3了 所以结果都为9
>>>def count():
fs=[]
for i in range(1,4):
def f(j):
def g():
return j*j
return g
fs.append(f(i))
return fs
>>>f1,f2,f3=count()
>>>f1()
1
>>>f2()
4
>>>f3()
9
返回的时候j的值已经确定了 所以 得到的值不是全部为9
总结: 在使用函数做为返回值的时候 需要注意的是 返回的函数并没有立即执行 而是主动调用之后才开始执行。当然其相应的变量等等 都已经保存了下来。