[解決済み】ファイル間でグローバル変数を使用する?
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])
を使おうとしているのですが
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 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
こうすることで、グローバル変数を複数回初期化することを避けながら、目的を達成することができます。
関連
-
[解決済み] データ型が理解できない
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] 億の相対的輸入
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】__str__と__repr__の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
Python関数の高度な応用を解説
-
Python jiabaライブラリの使用方法について説明
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)