【问题标题】:Global variables to submodule子模块的全局变量
【发布时间】:2016-09-15 02:47:48
【问题描述】:

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

我想将主函数中的一些变量设置为全局变量,并在导入的子模块的函数中使用它们作为全局变量(有一个具体的事情是我不能将它们用作函数的参数) 无法弄清楚如何做到这一点。我的例子:

#submodule.py
def subfunction():
    print COLORS

#mainmodule.py

from submodule import subfunction

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

【问题讨论】:

    标签: python module global packages


    【解决方案1】:

    一种可能的方法是创建一个类Color 并使用一个静态变量values。

    文件颜色.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]
    

    【讨论】:

      【解决方案2】:

      不要这样做。有一种叫做“耦合”的东西被用作衡量编程复杂性的指标。基本上,事物耦合得越松散越好,这意味着一段代码使用的值应该显式传递给该代码。因此,您应该按照以下方式编写示例:

      #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 值还是有些可疑,因为它会收紧耦合。据推测,它的目的是让模块中的其他功能可以使用 COLORS 而无需显式传递值,但这不是一个非常好的主意。

      【讨论】:

      • Python 2 已过时。 print(colors) 是现在写东西的方式。
      • 我很清楚,谢谢。我想你知道这个答案是在 2016 年写的。Stackoverflow 中有数千个这样的答案。你会让作者回去修改它们吗?
      猜你喜欢
      • 2016-02-10
      • 2015-03-07
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多