我不是在问Python的作用域规则。我大致了解作用域在Python中用于循环的原理。我的问题是为什么设计决策是以这种方式做出的。例如(无双关语):
for foo in xrange(10): bar = 2 print(foo, bar)
上面将打印(9,2)。
这让我感到很奇怪:“ foo”实际上只是在控制循环,而“ bar”是在循环内部定义的。我能理解为什么可能需要在循环外部访问“ bar”(否则,for循环的功能将非常有限)。我不明白的是为什么循环退出后,控制变量必须保留在范围内。以我的经验,它只会使全局名称空间混乱,并使跟踪其他语言的解释器捕获的错误变得更加困难。
最可能的答案是,它只是使语法简单,没有成为采用的绊脚石,而且许多人对在循环结构中分配名称时不必消除名称的范围感到满意。变量不在范围内声明,而是由赋值语句的位置隐含。该global关键字存在只是为了这个原因(象征分配在全球范围内完成)。
global
更新资料
这是关于该主题的精彩讨论:http : //mail.python.org/pipermail/python-ideas/2008-October/002109.html
先前的使for循环变量位于循环本地的建议,偶然发现了现有代码的问题,该代码依赖循环变量在退出循环后保持其值,这似乎被认为是理想的功能。
简而言之,你可以将其归咎于Python社区:P