我不是在询问 Python 的作用域规则;而是在询问。我大致了解 Python for 循环中作用域的工作原理。我的问题是为什么以这种方式做出设计决策。例如(没有双关语):
for foo in xrange(10):
bar = 2
print(foo, bar)
上面将打印(9,2)。
这让我觉得很奇怪:“foo”实际上只是控制循环,而“bar”是在循环内部定义的。我可以理解为什么“bar”可能需要在循环之外访问(否则,for 循环的功能将非常有限)。我不明白的是为什么控制变量有必要在循环退出后保留在范围内。根据我的经验,它只会使全局命名空间变得困惑,并使追踪其他语言的解释器捕获的错误变得更加困难。
最佳答案
最可能的答案是,它只是保持语法简单,并没有成为采用的绊脚石,而且许多人很高兴在循环构造中分配名称时不必消除名称所属范围的歧义。变量不是在作用域内声明的,它是由赋值语句的位置隐含的。 global
关键字正是出于这个原因而存在(表示分配是在全局范围内完成的)。
更新
这里有一个关于这个主题的很好的讨论:http://mail.python.org/pipermail/python-ideas/2008-October/002109.html
Previous proposals to make for-loop variables local to the loop have stumbled on the problem of existing code that relies on the loop variable keeping its value after exiting the loop, and it seems that this is regarded as a desirable feature.
简而言之,你可以将其归咎于 Python 社区:P
关于python - Python 'for' 循环中的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54832759/