pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

Pythonのglobalとnonlocal宣言

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のように、外側の値を参照する内側の関数をクロージャという