当初、他モジュールの変数をfromつきでimportし、モジュール名省略で参照および更新することを想定していました。
(グローバル変数的な用途)
しかし実機で試すと以下の通りであり、モジュール名を省略すべきでないように考えられました。
実機で試した結果
Python
1# Main.py 2import Sub 3from Sub import x 4 5print("start") 6print(f" x = {x}") 7print(f" Sub.x = {Sub.x}") 8 9Sub.x = 2 10print("Sub.x -> 2") 11print(f" x = {x}") 12print(f" Sub.x = {Sub.x}") 13 14x = 3 15print("x -> 3") 16print(f" x = {x}") 17print(f" Sub.x = {Sub.x}") 18 19Sub.x = 4 20print("Sub.x -> 4") 21print(f" x = {x}") 22print(f" Sub.x = {Sub.x}")
Python
1# Sub.py 2x = 1
Python
1# Main.pyの実行結果 2start 3 x = 1 4 Sub.x = 1 5Sub.x -> 2 6 x = 1 7 Sub.x = 2 8x -> 3 9 x = 3 10 Sub.x = 2 11Sub.x -> 4 12 x = 3 13 Sub.x = 4
疑問点
質問1.
結果から以下の通り理解しましたが、正しいでしょうか。
0. Subをimportした時点で、Mainにもローカル変数xが定義され、Subのxと同じ値で初期化される
0. "Sub.x"にてSubのxへ、"x"にてMainローカルのxへアクセスするようになる
0. Mainで"x"の値を更新するまでは、Mainにおいて"Sub.x"も"x"も同じ値を持つ
0. Subで"x"の値を更新するまでは、Mainにおいて"Sub.x"も"x"も同じ値を持つ
0. Mainで"Sub.x"を更新すると、Subにおける"x"も同じ値に更新される
質問2.
公式なドキュメントにこの辺りの動作の記載はありますでしょうか。python.orgでは見つけられませんでした。
質問3.
質問1の理解が正しいとすると、他モジュールの変数を使用する際にモジュール名を省略するのはとても危険に感じられました。
一般的にも、他モジュールの変数使用時はモジュール名を省略しないものなのでしょうか。
あるいは他に変数の取り違えを回避するテクニック等あればご教示ください。
(クリーンな設計やコーディング規約の明確化のようなある意味属人的な方法ではなく、システム的な歯止めがあるか知りたいです)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/14 04:26