在Python 2.6中,
>>> exec "print (lambda: a)()" in dict(a=2), {}
2
>>> exec "print (lambda: a)()" in globals(), {'a': 2}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
File "<string>", line 1, in <lambda>
NameError: global name 'a' is not defined
>>> exec "print (lambda: a).__closure__" in globals(), {'a': 2}
None
我期望它会打印两次2
,然后打印一个只包含一个cell
的元组。在3.1中也是同样的情况。发生了什么事?
compile
可以识别像a
这样的自由变量。 - hellohawaiiclosure
参数是否与解决这个问题有关?请参见 https://dev59.com/BF7Ms4gBPY-HTNNjtH9l。 - Barmar