为什么可以在 Python 中的循环外访问变量?

Why a variable can be accessible outside the loop in Python?

考虑这个例子:

for iter in xrange(10):
   myvar = iter

print myvar
# 9

这里myvar分明是在循环外?但它仍然可以访问。 如果这是 Perl,它会抛出一个错误。

Python 中出现此功能的原因是什么? 有害吗?那么最佳做法是什么,在循环之前声明一个变量?

把它想象成你在做这个:

my_var = 0
my_var = 1
my_var = 2
...
my_var = 9

print my_var

这基本上就是迭代的样子,没有理由无法从您当前的方法/范围内访问 my_var

for 循环没有创建新的作用域(Ruby 也以同样的方式运行)。如果您来自一种为块创建新作用域的语言,这可能会让您感到惊讶。

只要你知道规则,我不认为它有害。

如果您的函数和方法太大以至于您无法跟踪,那么您的函数和方法太大了。