python - Python 'for' 循环中的范围

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

相关文章:

linux - 如何在行号处拆分文件

python - Python 中嵌套的 try/except block 是一种好的编程习惯吗?

linux - POSIX 异步 I/O (AIO) 的现状如何?

linux - 在linux中用制表符替换空格

python - Pelican 3.3 pelican-quickstart 错误 "ValueE

python - 是否可以使用 scikit-learn K-Means Clustering 指定

python - 移动平均线或移动平均线

c - 如何从 C 中通过 PID 在 Linux 中计算进程的 CPU 使用率?

python - Python 3 的图像库

linux - 是否可以在文件名中使用 "/"?