这个问题是来自于美国作家鲁特兹(Mark Lutz)所作的一本《Learning Python,Fourth Edition》书里提及到的。
原文如下:
如果 lambda 或者 def 在函数中定义,嵌套在一个循环之中,并且嵌套的函数引用了一个上层作用域的变量,该变量被循环变量所改变,所有在这个循环变量中产生的函数将会有相同的值——在最后一次循环中完成时被引用变量的值。
我们来看下一个例子:
>>> def makeActions(): ... acts = [] ... for i in range(5): ... acts.append(lambda x: i ** x) ... return acts ... >>> acts = makeActions() >>> acts[0](2) 16 >>> acts[1](2) 16 >>> acts[2](2) 16 >>> acts[3](2) 16 >>> acts[4](2) 16
另一个例子:
>>> def makeActions(): ... acts = [] ... for i in range(5): ... acts.append(lambda x, i = i: i ** x) ... return acts ... >>> acts = makeActions() >>> acts[0](2) 0 >>> acts[1](2) 1 >>> acts[2](2) 4 >>> acts[3](2) 9 >>> acts[4](2) 16
具体还待考究
原文地址:https://www.cnblogs.com/importthis/p/8975690.html
时间: 2024-11-10 14:04:49