Python 嵌套函数中内部函数引用外部函数循环变量情况
Python中的嵌套函数也称为闭包(Closure),有一个特点就是内部函数可以引用外部函数内的变量并且在外部函数返回后保存该引用变量的值;但是如果该引用变量是循环变量时,结果有点变化,下面是例子:
def outer():
result = []
for i in range(5):
result.append(lambda x: i ** x)
return result
上面是一个嵌套函数,内部函数为lambda函数,每次循环,将生成的lambda函数插入列表中,表面看生成的函数中i会从0到4,但是实际执行时却不是想要的结果
f = outer()
[item(2) for item in f]
[16, 16, 16, 16, 16]
这里每个lambda函数中的i都为循环结束后的值4
若要实现i从0到4,需要借助默认参数保存每次循环的变量值,如下:
def outer():
result = []
for i in range(5):
result.append(lambda x, i=i: i ** x)
return result
这里在lambda函数中使用了默认参数,执行结果如下:
f = outer()
[item(2) for item in f]
[0, 1, 4, 9, 16]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)