2016-05-18 4 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) 

それでもmainmoduleにCOLORSの値を設定するglobalの使用は、やや疑わしいです。おそらくその目的は、モジュール内の他のファンクションが明示的に値を渡すことなく色を使用できるようにすることですが、それはひどく良い考えではありません。

1

可能な方法の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]