
Pythonでグローバル変数を取り扱っているとき、関数内でグローバル変数の値を更新しても、更新が反映されていないということはないでしょうか。
これには、Pythonのお作法が関わっています。
この解決法と、グローバル変数について解説します。
目次
結論:関数内でglobalステートメントを記述する
例えば、以下のようなソースコードがあったとします。
a = 'before'
def update():
a = 'after'
# ここでの出力は'before'
print('a:', a)
update()
# ここでの出力はupdateを実行したので'after'
print('a:', a)ソースコードの中のコメント通り、2回目の出力ではaの値がafterになっていることを期待します。
では、実行結果です。
a: before
a: beforeというわけで、残念ながらbeforeのままでした。
そこで、プログラムの4行目にglobalステートメントを追記します。
a = 'before'
def update():
global a # ここに追加
a = 'after'
# ここでの出力は'before'
print('a:', a)
update()
# ここでの出力はupdateを実行したので'after'
print('a:', a)実行結果は、下記の通りです。
a: before
a: afterちゃんと2回目の出力結果がafterになりました!
補足
関数内ではグローバル変数と認識しない
Pythonの場合は、クラスや関数の外で宣言したものはグローバル変数となります。
これは、他の多くの言語と共通していることと思います。
加えてPythonの場合は、クラスや関数内でグローバル変数を利用する場合には、そこでこの変数はglobal変数だということを明記しないといけないです。
つまり、上記、main1.pyの場合では、global変数のaと、update関数内でのaは別物(ローカル変数a)として取り扱っているということです。
特にエラーが出るわけでもなく、気が付きにくいので注意しておきましょう。
[st-myblock id=”3235″]
コメント