2016-05-18 96 views
0

我有一個模塊,它由使用從另一個模塊導入的函數的函數組成。讓我們稱它爲主要功能。全局變量到子模塊

我想在主函數中設置一些變量作爲全局變量,並將其作爲全局變量在導入的子模塊的函數中使用(具體的事情我不能用它們作爲函數的參數) 無法弄清楚去做這個。我的例子:

#submodule.py 
def subfunction(): 
    print COLORS 

#mainmodule.py 

from submodule import subfunction 

def main(colors, x, y, z): 
    global COLORS 
    COLORS=colors 
    subfunction() 

回答

0

不要這樣做。有一種稱爲「耦合」的用作編程複雜度的度量。基本上,越鬆散的東西耦合越好,這意味着一段代碼使用的值應該明確地傳遞給該代碼。因此,你應該寫你的榜樣沿着這些線路:

#submodule.py 
def subfunction(colors): 
    print colors 

#mainmodule.py 
from submodule import subfunction 

def main(colors, x, y, z): 
    global COLORS 
    colors = COLORS 
    subfunction(colors) 

即使這樣你的global使用設置爲mainmodule顏色的值是有點可疑,因爲它收緊的耦合。據推測,其目的是使模塊中的其他功能可以使用COLORS而不必明確地傳遞值,但這不是一個非常好的主意。

1

一種可能的方法是創建一個類Color並使用靜態變量values

文件Color.py:

class Colors: 
    values = [255, 0, 0] 

文件main.py:

from Color import Colors 

def main(): 
    # Default: 
    print Colors.values 

    # New: 
    Colors.values = [0, 255, 0] 
    print Colors.values 

if __name__ == "__main__": 
    main() 

輸出:

[255, 0, 0] 
[0, 255, 0]