我在运行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设计的错误吗?如果没有,为什么?感谢。
答案 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版本的字典和集合理解确实创建了一个新的范围。