Python | inner関数とノンローカル宣言の使い方

2021年5月25日

公開日:2021/5/25

Pythonでは,関数の中に関数を定義することができる.中の関数をinner関数と呼ぶ.外側の関数からinner関数を呼び出すため,inner関数の処理は外からは分からなくできる.なお,ノンローカル宣言をすると,外側の関数の変数をinner関数の変数に置き換えることができる.以下にinner関数とノンローカル宣言の説明をする.

◆実施環境

Python 3.8.8

■inner関数の作成

関数(外側関数)を定義し,その中に定義する関数をinner関数と呼ぶ.外側関数を呼び出すことによってinner関数での処理を行うことができる.以下では7行目の外側関数(outer)によって,4行目のinner関数の処理が実行される.

# 1の処理(基本的なinner関数)
def outer():
  def inner():
    print('Hello')
  inner()

outer()

■実行結果

# 1の結果
Hello

 

■ノンローカル宣言の利用

以下にノンローカル宣言なしの構文(#1の処理)とありの構文(#2の処理)を記載する.#1と#2の構文の違いは,15行目の”nonlocal programming”の有無である.ノンローカル宣言にするには,変数の前に”nonlocal”を付ける.

# 1の処理(ノンローカル宣言なし)
def outer():
  programming = 'PHP'
  def inner():
    programming = 'Python'
    print(f'inner処理: programming is {programming}')
  inner()
  print(f'outer処理: programming is {programming}')
outer()

# 2の処理(ノンローカル宣言あり)
def outer():
  programming = 'PHP'
  def inner():
    nonlocal programming # ノンローカル宣言
    programming = 'Python'
    print(f'inner処理: programming is {programming}')
  inner()
  print(f'outer処理: programming is {programming}')
outer()

■実行結果

#1の結果:出力した値(Python, PHP)は異なる
#2の結果:#2の処理の14行目の変数"PHP"が16行目の変数"Python"に置き換わることによって,出力した値は同じ"Python"となる.

# 1の結果
inner処理: programming is Python
outer処理: programming is PHP

# 2の結果
inner処理: programming is Python
outer処理: programming is Python

以上