Python プログラミング

【Python】グローバル変数が更新されない時の対処法

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)として取り扱っているということです。

特にエラーが出るわけでもなく、気が付きにくいので注意しておきましょう。

-Python, プログラミング
-, ,