Pyhton3にて、importした外部モジュールのグローバル変数がいつどのように初期化されるのかご教示いただけますでしょうか。
各種ドキュメントを見ても理解できず実機で試しましたが、実行結果を見ても今一つ腹落ちしない状況です。
当初の仮説
・importしたモジュール内の関数が呼ばれる度に、当該モジュール内でグローバル変数の初期化が行われる
試したコード (1)
Main.py
Python
1import Test 2 3print (Test.test1) 4Test.printtest1() 5Test.printtest1() 6Test.printtest1()
Test.py
Python
1test1 = 5 2 3def printtest1(): 4 global test1 5 test1 += 1 6 print(test1)
予想結果 (1)
5
6
6
6
実際の結果 (1)
5
6
7
8
上記を受けての仮説
・importしたモジュールのグローバル変数の初期化は、import元でimportした時点でのみ行われる
試したコード (2)
Main.py
Python
1import Test 2 3print (Test.test1) 4Test.printtest1() 5Test.printtest1() 6Test.printtest1() 7 8#普通はこんな場所に書きませんがテスト用にあえて 9import Test 10 11print (Test.test1) 12Test.printtest1() 13Test.printtest1() 14Test.printtest1()
Test.py
Python
1#変更なし 2test1 = 5 3 4def printtest1(): 5 global test1 6 test1 += 1 7 print(test1)
予想結果 (2)
5
6
7
8
5
6
7
8
実際の結果 (2)
5
6
7
8
8
9
10
11
結果からの推察
・importしたモジュールのグローバル変数は、当該モジュール内の関数が最初に呼ばれた時のみ1度だけ初期化される
・「当該モジュール」「最初に呼ばれた」はPythonの処理系がいい感じに管理していてユーザーは意識しなくて良い
自分としては明確なルールがわかったとは言い難く、importしたモジュール内のグローバル変数を安心して参照、変更し難いです。
どなたかご教示いただけませんでしょうか。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/02 06:30
2020/04/02 06:33
2020/04/02 06:46