为什么列表理解会影响外部变量的值?

时间:2019-08-20 11:54:15

标签: python python-2.7 list list-comprehension

如果您使用Python 2.7运行此代码,

i = 5
x = [1, 2, 3, 4]
y = [i*i for i in x if i % 2 == 0]

i的值更改为4。但是如何?

2 个答案:

答案 0 :(得分:3)

我认为您正在使用Python 2.7,该泄漏了理解中定义的变量。在最后一次迭代中,循环中的i等于4,并且一旦控件离开了理解,来自理解的名称i就会掩盖全局名称。

Python 3不再这样做了,所以您应该进行更新。

答案 1 :(得分:2)

这是Python 2的特定限制。列表推导中的变量在Python 3中具有自己的作用域:

Python 3.7.2 (default, Mar 11 2019, 11:54:40) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> i = 5
>>> x = [1, 2, 3, 4]
>>> y = [i*i for i in x if i == 2]
>>> i
5