2013-11-15 38 views
1

我想跨模塊使用全局變量,通過導入變量並在函數內本地修改它。代碼和輸出如下。最後的輸出結果並不是我所期望的,我認爲它應該是15,因爲它已經被func3在全局範圍內修改過了。任何人都可以解釋爲什麼最後的輸出仍然是10.Python全局關鍵字行爲

謝謝!

test2.py

myGlobal = 5 
def func3(): 
    global myGlobal 
    myGlobal = 15 
    print "from 3: ", myGlobal 

test1.py

from test2 import myGlobal, func3 

def func1(): 
    global myGlobal 
    myGlobal = 10 

def func2(): 
    print "from 2: ", myGlobal 

print "init: ", myGlobal 
func1() 
func2() 
func3() 
func2() 

輸出:

init: 5 
from 2: 10 
from 3: 15 
from 2: 10 
+0

'func3'使用自己'myGlobal'沒有在'test1.py'中導入'myGlobal' – Farhadix

+5

Python中沒有真正的全局變量;該模塊擁有自己的「全局」名稱空間。您可以顯式修改'test2.myGlobal',但'global'關鍵字不會讓您重新綁定另一個模塊中的名稱。 – geoffspear

+2

請不要編寫這樣的代碼,這是不必要的,使代碼更難以推理,而且更難以測試。 –

回答

0

正如在註釋中規定,global在Python裝置模塊級別。

這樣算下來:

a = 1 

有作爲a完全相同的效果:

def f(): 
    global a 
    a = 1 
f() 

而且在變量沒有跨模塊共享兩種情況。

如果您希望跨模塊共享變量,請檢查this

相關問題