2015-12-17 42 views
0

前引用了我新的Python試圖執行此代碼:unboundlocalerror局部變量 'I' 分配

def dubleIncrement(): 
    j = j+2 

def increment(): 
    i = i+1 
    dubleIncrement() 

if __name__ == "__main__": 

    i = 0 
    j = 0 
    increment() 
    print i 
    print j 

但收到此錯誤:

unboundlocalerror local variable 'i' referenced before assignment 

任何人有任何想法,爲什麼i是不是全局的

+1

因爲您沒有使用'global'關鍵字嗎? – Hacketo

+0

因爲我沒有在'increment'範圍內定義' – ZdaR

+0

'def increment():global i' –

回答

1

聲明global關鍵字在你的函數中訪問全局而不是本地變量。即

def dubleIncrement(): 
    global j 
    j = j+2 

def increment(): 
    global i 
    i = i+1 

注意,當你在if聲明聲明i = 0j = 0,這是設置一個全局變量,但因爲它是任何功能範圍之外,該global關鍵字是沒有必要在這裏使用。

理想情況下,您應儘量避免使用全局變量,並嘗試將變量作爲參數傳遞給函數(想想當您決定在其他函數中再次使用變量名稱ij時會發生什麼 - 可能發生醜陋的碰撞!)。以下是編寫代碼的更安全的方法:

def dubleIncrement(x): 
    x = x+2 
    return x 

def increment(x): 
    x = x+1 
    return x 

if __name__ == "__main__": 
    i = 0 
    j = 0 
    i = increment(i) 
    j = dubleIncrement(j) 
    print i 
    print j 
相關問題