1. ホーム
  2. パイソン

[解決済み】ファイル間でグローバル変数を使用する?

2022-04-18 13:52:21

質問

グローバル変数がどのように機能するのか、少し混乱しています。私は約50のファイルを持つ大規模なプロジェクトを持っており、私はそれらのファイルすべてに対してグローバル変数を定義する必要があります。

私が行ったのは、プロジェクトの中でそれらを定義することです。 main.py ファイルでは、以下のようになります。

# ../myproject/main.py

# Define global myList
global myList
myList = []

# Imports
import subfile

# Do something
subfile.stuff()
print(myList[0])

を使おうとしているのですが myListsubfile.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 writingやpickleを使わないで、どうすればいいのか思いつきません。

解決方法は?

問題は、あなたが定義した myList から main.py しかし subfile.py を使用する必要があります。この問題を解決するきれいな方法を紹介します。すべてのグローバルを1つのファイルに移動し、このファイルを 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

こうすることで、グローバル変数を複数回初期化することを避けながら、目的を達成することができます。