【问题标题】:Why doesn't Python delete the iterate variable after a loop? [duplicate]为什么Python在循环后不删除迭代变量? [复制]
【发布时间】:2013-05-20 19:33:12
【问题描述】:

我在运行ipython时发现了这种情况。 python的版本是2.6.6和ipython 0.13。例如:

In [1]: for i in range(100):
   ...:     pass
   ...: 

In [2]: who
Out [2]: i  

In [3]: print i
Out [3]: 99

循环之后,变量i仍然存在。所以我想知道这是Python设计的错误吗?如果不是,为什么?谢谢。

【问题讨论】:

  • 这不是错误。这是预期的行为。

标签: python loops iterator ipython


【解决方案1】:

这不是错误。

for 循环创建一个新的范围。只有函数和模块会引入新的作用域,类、list/dict/set comprehensions*、lambdas 和 generators 在作用域方面是专门的函数。

这记录在for loop statement documentation:

循环结束时不会删除目标列表,但如果序列为空,则根本不会被循环分配。

此功能的实际用途是getting the last item of an iterable

last = defaultvalue
for last in my_iter:
    pass

* Python 2 中的列表推导式像 for 循环一样工作,没有新的作用域,但在 Python 3 中,它们以及跨 Python 版本的 dict 和 set 推导式确实创建了一个新作用域。

【讨论】:

  • @jamylak:感谢您的参考,这是一个很好的用例简短说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 2019-04-12
  • 2021-02-19
  • 2019-05-12
  • 2021-09-07
相关资源
最近更新 更多