我在运行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设计的错误吗?如果不是,为什么?谢谢。
这不是一个错误。
for
循环不会创建新范围。只有函数和模块引入了新的作用域,类、list/dict/set comprehensions *、lambdas 和 generators 在作用域方面是专门的函数。
这记录在for
循环语句文档中:
循环结束时不会删除目标列表,但如果序列为空,则循环根本不会分配给它。
此功能的实际用途是获取 iterable 的最后一项:
last = defaultvalue
for last in my_iter:
pass
* Python 2 中的列表推导式像for
循环一样工作,没有新的作用域,但在 Python 3 中,它们以及跨 Python 版本的 dict 和集合推导式确实创建了一个新作用域。