グローバル変数がどのように機能するかについて少し混乱しています。約 50 個のファイルがある大規模なプロジェクトがあり、それらすべてのファイルにグローバル変数を定義する必要があります。
私が行ったのは、プロジェクトmain.py
ファイルで次のように定義することです。
# ../myproject/main.py
# Define global myList
global myList
myList = []
# Imports
import subfile
# Do something
subfile.stuff()
print(myList[0])
次のようにmyList
使用しようとしていますsubfile.py
# ../myproject/subfile.py
# Save "hey" into myList
def stuff():
globals()["myList"].append("hey")
他の方法も試しましたが、うまくいきませんでした
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff()
print(globfile.myList[0])
中にはsubfile.py
こんなものが入っていました:
# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff():
globfile.myList.append("hey")
しかし、やはりうまくいきませんでした。これをどのように実装すればよいのでしょうか? 2 つのファイルがお互いを認識していない場合 (つまり、サブファイルはメインを認識していない場合)、そのようには動作しないのは理解していますが、io 書き込みや pickle を使用せずにそれを実行する方法が思いつきません。これはやりたくありません。
ベストアンサー1
問題は、myList
から定義したmain.py
が、subfile.py
それを使用する必要があったことです。この問題を解決する簡単な方法は、すべてのグローバルをファイルに移動し、このファイルを と呼ぶことですsettings.py
。このファイルは、グローバルの定義と初期化を担当します。
# settings.py
def init():
global myList
myList = []
次に、subfile
グローバルをインポートできます。
# subfile.py
import settings
def stuff():
settings.myList.append('hey')
subfile
はを呼び出さないことに注意してくださいinit()
。そのタスクは に属しますmain.py
。
# main.py
import settings
import subfile
settings.init() # Call only once
subfile.stuff() # Do stuff with global var
print settings.myList[0] # Check the result
この方法では、グローバル変数を複数回初期化することを回避しながら目的を達成できます。