2015-11-11 148 views
4

考慮這個例子:爲什麼在Python的循環之外可以訪問變量?

for iter in xrange(10): 
    myvar = iter 

print myvar 
# 9 

這裏myvar顯然是外循環?但它仍然可以訪問。 如果這是Perl,它會引發錯誤。

這種功能在Python背後的原因是什麼? 它有害嗎?那麼在循環之前聲明一個變量,那麼最佳做法是什麼?

+6

http://stackoverflow.com/questions/3611760/scoping-in-python-for-loops – galaxyan

+0

有全球範圍和功能(本地)範圍。沒有塊級的範圍。這是有這樣一個簡單的計劃的副作用。 – RobertB

+1

tl; dr:python!= c –

回答

5

沒有新的作用域由for循環創建(Ruby的行爲方式也相同)。如果您是來自爲區塊創建新範圍的語言,這可能會令人驚訝。

只要你知道規則,我不認爲這是有害的。

如果你的函數和方法太大以至於難以跟蹤,那麼你的函數和方法太大了。

-1

把它看成是,如果你這樣做:

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

print my_var 

這基本上是重複的樣子,也沒有理由my_var不會從當前的方法/範圍內的訪問。

相關問題