2016-05-18 99 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]