Python2的命名空间泄露

列表推导式与命名空间

Posted by mengxun on May 28, 2018

看下面一段代码:

>>> i = 1
>>> [i for i in range(5)]

然后在 Python 2Python 3 里打印出 i 的值,会发现它们是是截然不同的。

Python 2
>>> i
4
Python 3
>>> i
1

出现这种情况,是因为在 Python 2 里列表推导式的变量会泄露到局部作用域之外,而 Python 3 则不会。