上記の関数はすべてグローバルスコープで定義されており、すべてグローバル関数です。Pythonは、関数本体で固定関数もサポートしています。関数本体で定義されたこのような関数は、ローカル関数と呼ばれます。
デフォルトでは、ローカル関数は外部の世界から隠されています。ローカル関数は、それらの囲み関数内でのみ有効です。囲み関数は、ローカル関数を返し、プログラムが他のスコープでローカル関数を使用できるようにすることもできます。
>>> def ca(type、nn): def square(n): return n * n def cube(n): return n * n * n def fac(n): 結果 = 1 のための I における範囲(2、N + 1 ): result * = i type == ' square 'の場合は結果を 返します: return square(nn) elif type == ' cube ' : return cube(nn) else : fac(nn)を返す >>> ca(' スクエア'、3 ) 9 >>> ca(' キューブ'、3 ) 27
>>> ca( ''、3)
6
>>> ca( ''、4)
24
>>> ca( '3'、3)
6
ローカル関数の変数も、それが含まれている関数のローカル変数を不明瞭にします。
>>> def foo(): name = ' bob ' def bar(): print (name) 名前 = ' jeff ' バー() >>> foo() トレースバック(最新の呼び出しが最後): ファイル" <pyshell#174> "、行1、中 <モジュール> foo() ファイル" <pyshell#173> "、6行目、foo バー() ファイル" <pyshell#173> "、4行目、バー プリント(名前) UnboundLocalError:割り当て前に参照されるローカル変数' name '
Pythonはnonlocalキーワードを提供します。nonlocalステートメントを使用して、アクセス割り当てステートメントが、関数が配置されている関数のローカル変数のみにアクセスすることを宣言できます。
>>> def foo(): name = ' bob ' def bar(): 非ローカル名 印刷(名前) 名前 = ' jeff ' バー() >>> foo() ボブ
非ローカル関数とグローバル関数はほぼ同じです。違いは、グローバル変数はグローバル変数を宣言するために使用され、非ローカル変数は、現在の関数が配置されている関数のローカル変数を宣言するために使用されることです。