2011-03-18 18 views
1

也許我的咖啡是不是今天早上足夠強大,但是這種行爲是困惑我現在:(請注意,它是print a聲明,一個人要養的錯誤func2(),不a = 'bar'在函數的上下文中設置全局變量的值會引發UnboundLocalError?

>>> a = 'foo' 
>>> def func1(): 
... print a 
... 
>>> def func2(): 
... print a 
... a = 'bar' 
... 
>>> func1() 
foo 
>>> func2() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in func2 
UnboundLocalError: local variable 'a' referenced before assignment 

有人可以向我解釋發生了什麼事嗎?

+0

可能重複的[Python作用域](http://stackoverflow.com/questions/146359/python-scope) – 2011-03-18 16:34:49

回答

2

因爲a被設置在func2之內,Python假定它是一個局部變量。把global a聲明print語句之前:

def func2(): 
    global a 
    print a 
    a = 'bar' 

又見this question about Python scoping rules

+0

謝謝,就是這樣。我很少在Python中使用全局變量,我還沒有發現這一點。 – jsdalton 2011-03-18 16:37:01

相關問題