Jos*_*hua 18 python closures list-comprehension
看看下面这段代码,它显示了一个列表理解.
>>> i = 6
>>> s = [i * i for i in range(100)]
>>> print(i)
Run Code Online (Sandbox Code Playgroud)
当您在Python 2.6中执行代码示例时,它会打印99,但是当您在Python 3.x中执行它时,它会打印6.
是什么改变行为的原因,以及为什么是输出6中的Python 3.x的?
先感谢您!
马克·拜尔斯回答得很完美。
只是作为一个注释。.
在Python 2.x中,如果将方括号更改为括号(创建生成器表达式而不是列表推导),则会注意到控件变量没有泄漏。
>>> i = 6
>>> s = (i for i in range(100))
>>> print i
6
Run Code Online (Sandbox Code Playgroud)
与
>>> i = 6
>>> s = [i for i in range(100)]
>>> print i
99
Run Code Online (Sandbox Code Playgroud)
(当然,在Python 3中,这是固定的,列表理解不再是泄漏控制变量)