前提・実現したいこと
Pythonにおいて、
複数ファイルにまたがり、グローバル変数の共有がしたいです。
コードは書きましたが、中途半端な共有しかできないようです。
グローバル変数を正しく参照するにはどうすればよいか、教えていただければ助かります。
発生している問題・エラーメッセージ
中途半端とは、グローバル変数の宣言をしている親.pyと、グローバル変数の参照をする子.pyがあり、
親.pyでは、グローバル変数宣言で初期値を代入し、その変数を別の値に上書きした上で、子.pyの関数をコールしていますが、
子.pyがグローバル変数を参照すると、初期値が見え、親.pyで上書きした値になりません。
該当のソースコード
python
1ファイル名:oya.py 2import ko 3 4# -------------------------------------------------- 5# グローバル変数定義 6# -------------------------------------------------- 7g ='aaa' 8 9# -------------------------------------------------- 10# メイン処理 11# -------------------------------------------------- 12def main(): 13 global g 14 print ('1-1 main()の最初⇒'+g) 15 g ='bbb' 16 print ('1-2 main()の2回目⇒'+g) 17 ko.subFunc() 18 print ('1-3 main()の最後⇒'+g) 19 20 21if __name__ == "__main__": 22 main()
python
1ファイル名 ko.py 2import oya 3 4def subFunc(): 5 6 print ('2-1 subFuncの最初⇒'+oya.g) 7 8 oya.g='zzz' 9 10 print ('2-2 subFuncの最後⇒'+oya.g)```
試したこと
上記PGのように各所にprint分を入れること、関数内でグローバル変数を書き換えるなどを試行した。
上記PGの動作結果は下記となった。
python
1実行結果 21-1 main()の最初⇒aaa 31-2 main()の2回目⇒bbb 42-1 subFuncの最初⇒aaa 52-2 subFuncの最後⇒zzz 61-3 main()の最後⇒bbb
1-1 main()の中でグローバル変数の初期値が参照できた。 想定通り
1-2 main()の中で変更したグローバル変数の値が参照できた。 想定通り
2-1 subFunc()の中からグローバル変数を参照できたのは想定通りですが、その値が初期値であることは想定外。
2-2 subFunc()の中で変更したグローバル変数の値が参照できた。想定通り
1-3 グローバル変数はsubFunc()の中で変更しているが、main()関数の中で変更した最後の値が見えている。想定外
### 環境
Python 3.9.6
VS Code 1.61.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。