global宣言

pythonでは関数内部で定義して変数をローカル変数、関数の外側で定義した変数をグローバル変数と呼びます。

(pythonには他の言語で言うグローバル変数、つまりどこからでも参照できる変数というものはありません。ただし、公式ドキュメントで「user’s global variables」という表現が使われているため、当サイトではグローバル変数という言葉を採用しています。)

グローバル変数とローカル変数

グローバル変数の参照

グローバル変数は関数の内部から参照することが可能です。

x = 100
def sample_function():
    print(x) # 100が出力される

sample_function()

グローバル変数の更新

ただし、関数の内部でグローバル変数に代入した場合、ローカル変数の定義として扱われてしまいます。

この場合、グローバル変数は変更されません。

x = 100
def sample_function():
    x = 200
    print(x) # 200が出力される

sample_function() # 関数内部でxの値を変更
print(x) # 100が出力される。つまり、関数の外側の値は変更されない

関数内部のprint関数ではローカル変数が出力されています。また、関数の外側のprint関数ではグローバル変数が出力されています。

グローバル変数の方は値が変更されていないことが確認できます。

では、グローバル変数を更新する場合はどうすればよいでしょうか?

これは、global宣言を記述することで解決します。

x = 100
def sample_function():
    global x # global宣言 xはglobal変数であることを明示する
    x = 200
    print(x)

sample_function() # 関数内部でxの値を変更
print(x) # 関数の外側の値が変更されている

上のサンプルではグローバル変数が更新されていることが確認できます。