2013-03-20 90 views
4

這是我的代碼:蟒:局部變量被分配之前引用

x = 1 
def poi(y): 
     # insert line here 

def main(): 
    print poi(1) 

if __name__ == "__main__": 
    main() 

如果以下4行被放置,一次一個,以代替# insert line here

Lines   | Output 
---------------+-------------- 
1. return x | 1 
2. x = 99  | 
    return x | 99 
3. return x+y | 2 
4. x = 99  | 99 

在上述線看起來全球x以上功能正在使用案例1和3

但是,

x = x*y  
return x 

這給

error : local variable 'x' is reference before assignment 

什麼在這裏錯了嗎?

回答

3

當你想訪問一個全局變量時,你可以通過它的名字來訪問它。但是如果你想改變它的價值,你需要使用關鍵字global

嘗試:

global x 
x = x * y  
return x 

在案例2中,x被創建爲一個局部變量,全局X從未使用過。

>>> x = 12 
>>> def poi(): 
... x = 99 
... return x 
... 
>>> poi() 
99 
>>> x 
12 
+1

或只是'返回X * y' – namit 2013-03-20 09:31:18

+0

但萬一2)也將其值沒有被使用改變了全球 – navyad 2013-03-20 09:34:48

+1

沒有,萬一2,x是本地變量。我已經更新了我的回答 – 2013-03-20 09:38:06

5

當Python看到你是分配給它x迫使它是一個局部變量名。現在就不可能看到該功能的全球x(除非你用global關鍵字)

所以

情況1)由於沒有本地x,您將獲得全球

案例2)你在功能分配到本地x所以所有引用x將是當地的一個

案例3)沒有問題,它使用全球x再次

案例4)同情形2