2017-06-15 18 views
-1

パッケージ内のすべてのモジュールで使用されるグローバルパッケージ変数を定義するのは難しいです。 私はこのコードを持っている:実行時にPythonのグローバルパッケージ変数を更新するには

# my_module.py 
from .__main__ import GLOBAL_VAR 

def print_global(): 
    print(GLOBAL_VAR) 


# __main__.py 
from my_package import my_module 
GLOBAL_VAR = '' 

def main(): 
    global GLOBAL_VAR 
    GLOBAL_VAR = 'myvalue' 
    my_module.print_global() 

if __name__ == '__main__': 
    main() 

を私はmy_module.print_global()myvalueを印刷することを期待し、代わりにそれは空の文字列(初期値)を出力します。 GLOBAL_VAR宣言後のモジュールをmain()にインポートしようとしましたが、役に立たなかったです。

GOBAL_VARmain()から再定義して、パッケージ内のすべてのサブモジュールで使用できるようにしてください。 globalキーワードを使用する代わりに、私は他のオプションも受け入れます。

編集:提案された同様の質問は、これに部分的にしか答えません。再定義のグローバルについては何もありません。

+0

は、なぜあなたはその混乱が必要でしょうか? GLOBAL_VAR = 'myvalue''だけではないのですか? –

+0

@AzatIbrakov私は、変数をパッケージ内のすべてのモジュールで使用できるようにしたいので、追加の引数としてすべての関数/オブジェクトに渡したくありません。助言がありますか? – makeiteasy

+0

あなたの変数はどこから得られますか?環境/ファイル/インターネット/データベースから?あなたはそれを一度読む必要がありますか? –

答えて

0

私は、これはそれを行うための正しい方法でわからないんだけど、これは私はそれがうまく作った方法です:@の助言として

  1. は、円形の輸入を排除するために別のファイルsettings.pyGLOBAL_VARを移転Nearoo。

  2. main()settings.GLOBAL_VAR私は欲しいと思っています。

  3. そしてmy_moduleをインポートします。

ここでも問題は、変数の値がわからず、実行時にすべてのモジュールで使用するために定義する必要があったことです。

コードは、今どのように見えるかです:

# settings.py 
GLOBAL_VAR = '' 


# my_module.py 
from .settings import GLOBAL_VAR 

def print_global(): 
    print(GLOBAL_VAR) 


# __main__.py 
from my_package import settings 

def main(): 
    settings.GLOBAL_VAR = 'myvalue' 

    from my_package import my_module 
    my_module.print_global() 

if __name__ == '__main__': 
    main() 
関連する問題