2016-11-18 28 views
0

所以這裏是在函數內部使用x的代碼。在python函數中使用全局變量

x = 1 
def f(): 
    y = x 
    x = 2 
    return x + y 
print x 
print f() 
print x 

但蟒是不會來查找變量out功能範圍,並導致UnboundLocalError: local variable 'x' referenced before assignment。我不想修改全局變量的值,我只是想在我做y=x時使用它。

在另一方面,如果我只是在回報statment使用它,它按預期工作:

x = 1 
def f(): 
    return x 
print x 
print f() 

有人能解釋爲什麼嗎?

+0

問題不回答'y = x'但是'y = x'與'x = 2'一起。刪除其中一個,並且此錯誤消失。 (但你可能會有所不同:)) – furas

+0

但是'x = 2'低於'y = x',所以我的意思是python應該首先處理'y = x',將y賦值給y,然後在'x = 2'創建一個新的局部變量併爲其賦值2。不是嗎? –

回答

2

你在你的函數來指定global x如果你想修改你的價值, 但它不是強制性的,光看數值:

x = 1 
def f(): 
    global x 
    y = x 
    x = 2 
    return x + y 
print x 
print f() 
print x 

輸出

1 
3 
2 
+0

我認爲我沒有修改價值。問題更新 –

+0

'y = x',沒有修改'x',所以爲什麼我需要'global'關鍵字 –

+0

@IjazKhan'y = x'不是'x = 2'。 – JMat