2013-08-27 54 views
0

所以這個函數很長,所以我會總結一下。爲什麼我會得到未綁定的本地錯誤?

def func1(X = None, Y = None) : 
    if X : 
    dostuff 
     if condition : 
     Z += 1 
    if Y : 
    print Y 

func1.Z = 0 

def func2(A) 
    for loop that does stuff and calls func1 

當我運行它,它告訴我,行Z + = 1出現錯誤:

「UnboundLocalError賦值之前引用局部變量‘Z’」我讀過所有未綁定本地錯誤並在我可以找到的任務提問之前接受了提問,但沒有一個問題看起來很相似,都沒有解決方案。

我應該讓Z成爲一個全球性的嗎?

回答

5

因爲在函數對象上設置一個屬性,所以不是創建一個本地名稱。請參考功能內的功能對象:

func1.Z += 1 

或使其成爲全球性的。更好的是,避免使用這種惡意函數,只需將Z作爲本地函數或函數參數,並在函數結束時返回Z給調用者。

+0

啊!我不知道。出於好奇,self.Z會有效嗎?我會在10分鐘內將其選爲答案。 – CamelopardalisRex

+2

@AlexBaldwin:沒有。 「自我」不是功能; 「自我」在這裏什麼都沒有。 – user2357112

+1

http://pythontutor.com/visualize.html#看看這裏瞭解更多關於python名稱和值的信息。 http://nedbatchelder.com/text/names.html是一個很好的描述。 –

相關問題