python - Python 'for' 循环中的作用域

标签 python scope

我不是在询问 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/

相关文章:

javascript - 在调试器中更改局部范围变量

python - Pandas 中的逻辑多重索引

python - 用 numpy 拟合 y = x ** a 形式的回归

javascript - 在函数运行的第一个实例上设置变量值

actionscript-3 - For 循环变量作用域混淆

c - 如何在多个交互的 C 文件之间使用共享变量?

c++ - Mingw32-w64 GCC 4.9.2 正则表达式错误,还是我不懂 C++?

python - 从篮球引用网站解析 NBA 赛季统计数据,如何删除 html 评论标签

python - 最初绘制正确设置所有轴的数据时执行的 matplotlib 函数的名称是什么?

python - 数组的最小外接矩形