【发布时间】:2011-04-06 10:06:24
【问题描述】:
我不是在问 Python 的作用域规则;我一般了解作用域在 Python for 循环中的工作原理。我的问题是为什么以这种方式做出设计决策。例如(没有双关语):
for foo in xrange(10):
bar = 2
print(foo, bar)
上面将打印 (9,2)。
这让我觉得很奇怪:“foo”实际上只是控制循环,而“bar”是在循环内部定义的。我可以理解为什么可能有必要在循环外部访问“bar”(否则,for 循环的功能将非常有限)。我不明白为什么循环退出后控制变量必须保持在范围内。根据我的经验,它只会使全局命名空间变得混乱,并且更难追踪可能被其他语言的解释器捕获的错误。
【问题讨论】:
-
如果您不希望
for循环弄乱您的全局命名空间,请将其包装在一个函数中。大量关闭! -
除非您在全局命名空间中运行循环(不常见),否则它会使 local 命名空间变得混乱。
-
如果这不存在,你将如何在你离开循环后继续处理?只定义控制变量之前循环?
-
@endolith 是的...为什么不需要呢?
-
好吧,人们只会更喜欢他们习惯做的事情。我想说这种事情伤害了习惯这种事情并且在切换到另一种语言时必须经历一个痛苦的过程的 python 编码器。对于我们其他人来说,我想这是一个简洁的小捷径。