global宣言
グローバル変数を関数内で参照できるが、データ変更しても、新しいローカル変数が定義された状態になる。(もしくはUnboundLocalError例外)
global宣言を使えば、関数内でグローバル変数のデータ変更が可能
サンプルコード
VAR = 1
def hoge(a,b):
global VAR
print(VAR,a,b)
VAR = 4
print(VAR,a,b)
hoge(2,3)
print(VAR)
実行結果
1 2 3
4 2 3
4
nonlocal宣言
関数内に関数を定義する場合、内側の関数から外側の関数内の変数を変更するために利用
考え方は、global変数と同じ。
サンプルコード
def hoge_e(a,b):
c = a
def hoge_i():
nonlocal c
c = b
return c
return hoge_i()
h = hoge_e(1,2)
print(h)
実行結果
2
サンプルコードhoge_iのように、外側の値を参照する内側の関数をクロージャという