子模块的全局变量

时间:2016-05-18 14:29:40

标签: python module global packages

我有一个模块,它包含使用从另一个模块导入的函数的函数。让我们称之为主要功能。

我想在main函数中设置一些变量作为全局变量,并在导入的子模块的函数中将它们用作全局变量(有些特殊的东西,我不能将它们用作函数的参数) 无法弄清楚如何做到这一点。我的例子:

#submodule.py
def subfunction():
    print COLORS

#mainmodule.py

from submodule import subfunction

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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)

即便如此,使用globalmainmodule中设置COLORS的值也有点可疑,因为它会加强耦合。据推测,它的目的是使模块中的其他功能可以使用COLORS而无需明确传递值,但这不是一个非常好的主意。