返回函数与闭包
1.返回函数
高阶函数可以将函数作为返回值输出,即在一层函数下,套入第二层函数,此时可以返回第二层函数
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
此时使用lazy_sum函数,返回的值不是进行sum函数的内容,而是返回了sum函数本身。
sum作为内部函数,可以使用外部函数lazy_sum的参数与局部变量,返回lazy_sum时,相关变量和参数都返回到了sum内部函数中,这种程序结构称之为闭包
2.闭包
函数套函数的情况通俗的讲被称为闭包,但是在闭包中需要注意的一点:
返回函数不要引用任何循环变量,或者后续会发生变化的变量。
当实在需要循环变量时,可以通过新建一个函数的方式解决。如:
def count():
def f(j):
def g():
return j*j
return g
fs = []
for i in range(1, 4):
fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
return fs
f1, f2, f3 = count()
#f1 = 1
#f2 = 4
#f3 = 9
此时用g()的参数绑定循环变量当前的值,无论循环遍历如何修改,已经绑定的变量的值不变。
总之,闭包操作强大,但不好构造,要小心使用。
本人自认为理解的不够好,下面是转载于知乎的我认为对闭包阐述较好的一篇文章
python闭包理解