【问题标题】:Why list comprehension can affect the value of an outer variable? [duplicate]为什么列表推导会影响外部变量的值? [复制]
【发布时间】:2019-12-25 15:18:46
【问题描述】:

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

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

i 的值变成了 4。但是怎么做呢?

【问题讨论】:

  • python 3 还是 python 2?
  • python 3 的值等于 5。
  • 如果您使用 python 2,请在循环中使用另一个变量名。
  • 我当然可以使用另一个变量,但我只是问为什么会导致这种情况。

标签: python python-2.7 list list-comprehension


【解决方案1】:

我认为您使用的是 Python 2.7,它会泄漏理解中定义的变量。在最后一次迭代中,循环中的 i 等于 4,一旦控制离开了理解,理解中的名称 i 就会隐藏全局名称。

不过,Python 3 不再这样做了,因此您应该更新。

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 2017-01-14
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多