2013-10-22 122 views
0

我遇到了一些有關Python如何處理全局(模塊)變量和關鍵字的奇怪行爲。其他模塊的全局變量和全局語句

模塊1:

g = None 

def set_g_up(): 
    global g 
    g = "foo" 

set_g_up() 
print g 

模塊2:

from module_1 import * 

set_g_up() 
print g 

模塊1頁打印,如所預期,"foo"
模塊2打印None

什麼?這是同一個對象!或者,至少,我希望它是。

+0

[Python:在其中的模塊和類之間共享全局變量]的可能重複(http://stackoverflow.com/questions/3338283/python-sharing-global-variables-between-modules-and-classes-inherein) – aIKid

回答

2

每個模塊都有自己的全球名稱範圍。通過從另一個模塊導入*的所有內容,您可以創建副本(對值的其他引用)其他模塊的全局變量到您自己的模塊中。

使用,以便限定名稱,以防止這種情況的發生:

import module_1 

module_1.set_g_up() 
print module_1.g 

有沒有辦法通過調用它g訪問相同的變量,如果你實際上指的是可變module_1.g。你所能做的只是這兩個變量都包含相同的值(只對列表,對象和其他可變項有意義)。

+0

不變性的另一個原因。我現在瞭解瑞克希基。 – Profpatsch