Python | inner関数とノンローカル宣言の使い方
公開日: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
以上