我并不是在问 Python 的作用域规则;我大致了解Python for 循环中的作用域是如何工作的。我的问题是为什么要以这种方式做出设计决策。例如(无意双关):
for foo in xrange(10): bar = 2 print(foo, bar)
以上内容将打印(9,2)。
(9,2)
这让我觉得很奇怪:foo实际上只是控制循环,并且bar是在循环内部定义的。我可以理解为什么可能需要bar在循环外部访问 for(否则,for 循环的功能将非常有限)。我不明白的是为什么控制变量在循环退出后仍必须在范围内。根据我的经验,它只会使全局命名空间变得混乱,并使追踪其他语言的解释器会捕获的错误变得更加困难。
foo
bar
Python 中的作用域行为,其中循环控制变量foo就像
for
pdb
pylint
flake8
在 Python 中,像在循环之后一样保留循环变量的设计决策foo符合 Python 的简单性、可读性和实用性的理念。虽然它可能与其他一些语言中严格的范围规则不同,但它支持 Python 的目标,即在各种编程任务中直观且易于使用。了解这种行为有助于开发人员有效利用 Python 的优势,同时保持代码的简洁和可维护性。