This question already has an answer here:
- Scoping in Python 'for' loops 6 answers
Consider this example:
for iter in xrange(10):
myvar = iter
print myvar
# 9
Here myvar
is clearly outside the loop? But it is still accessible.
If this is Perl, it will throw an error.
What's the reason behind such feature in Python? Is it harmful? What's the best practice then, to declare a variable before looping?
There is no new scope created by the for loop (Ruby also behaves the same way). This may be surprising if you are coming from a language that creates new scopes for blocks.
I don't believe it's harmful as long as you know the rules.
If your functions and methods are so large that you have trouble keeping track, then your functions and methods are too large.
Think of it as if you're doing this:
my_var = 0
my_var = 1
my_var = 2
...
my_var = 9
print my_var
This is basically what the iteration will look like, there is no reason why my_var
would not be accessible from within your current method / scope.
来源:https://stackoverflow.com/questions/33643862/why-a-variable-can-be-accessible-outside-the-loop-in-python