Python

Pythonで学ぶ 内部関数・関数内関数・インナー関数

関数内の関数で値の変更が期待できそうだが、変更できないことがある。少し複雑な表現だが、コードで確認する。

def f():
  x = 42
  print(x) # 42
  
  def inner_f():
     x = 0 # この0はローカルでf()にある x には代入されない
     print(x) # 0
     
  inner_f()

  print(x) # 42
  
f()

nonlocal 宣言

以下のように、nonlocalを宣言することでその変数へアクセスできるようになる。

def f():
  x = 42
  print(x) # 42
  
  def inner_f():
     nonlocal x
     x = 0
     print(x) # 0
     
  inner_f()
  print(x) # 0
  
f()