为什么Python在循环后没有删除迭代变量?

时间:2013-05-25 08:35:05

标签: python loops iterator ipython

我在运行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设计的错误吗?如果没有,为什么?感谢。

1 个答案:

答案 0 :(得分:10)

这不是一个错误。

for循环创建新范围。只有函数和模块引入了一个新的作用域,其中class,list / dict / set comprehensions * ,lambdas和generator在作用域时都是专门的函数。

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版本的字典和集合理解确实创建了一个新的范围。