2016-12-14 126 views
0

類似的問題已經問過:的Python 3:跨模塊的全局變量的可見性

hereherehere,我知道這些。

假設你有2個模塊,其中一個有你想從另一個模塊中讀取的全局變量。有沒有辦法讓這些模塊可以訪問,而無需每次都將它們作爲module.variable引用?

實施例:

modulea.py:

import moduleb 
from moduleb import * 

print("A String: " + astring) 
print("Module B: " + moduleb.astring) 
afunction() 
print("A String: " + astring) 
print("Module B: " + moduleb.astring) 

moduleb.py:

astring = "dlroW olleH" 

def afunction(): 
    global astring 
    astring = "Hello World" 

輸出是

A String: dlroW olleH 
Module B: dlroW olleH 
A String: dlroW olleH 
Module B: Hello World 

表明通過使用「從模塊進口*「全局變量被複制而不是被引用。

在此先感謝您的幫助。

回答

1

from module import *module中的對象綁定到當前模塊中的已命名變量。這不是副本,而是添加對同一對象的引用。兩個模塊都會看到相同的對象,直到其中一個重新綁定對象。修改可變對象不會重新綁定變量,因此可以添加到列表等操作。但重新分配變量確實會重新指定它。通常情況下,重新綁定是直截了當:

myvar = something_else 

但有時它不是那麼清楚

myvar += 1 

對於不可變對象,例如intstr,這重新綁定變量,現在這兩個模塊有不同的價值觀。

如果您想確保始終引用同一個對象,請保留該命名空間引用。