Pythonでのクロージャーの使い方
Pythonでは、クロージャーとは、関数内に定義された関数オブジェクトです。クロージャーを使うと、外部の関数の変数やパラメータにアクセスし、保存することができます。これにより、外部の関数内での状態を保持することができます。
クロージャーの使い方を説明します。
1. クロージャーの定義
まず、クロージャーを定義します。外部の関数内に内部の関数を定義する形でクロージャーを記述します。以下は簡単な例です。
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
この例では、outer_functionという外部の関数があります。この関数内に、inner_functionという内部の関数を定義しています。
2. クロージャーの利用
外部の関数を実行すると、内部の関数が返されます。この内部の関数がクロージャーとなります。以下は、クロージャーを使った計算の例です。
add_5 = outer_function(5) result = add_5(3) print(result) # 出力結果: 8
この例では、outer_function(5)を実行すると、内部の関数inner_functionが返されます。これをadd_5という変数に代入しています。add_5はクロージャーとして機能します。
add_5に引数3を渡して呼び出すと、内部の関数inner_functionの結果であるx + yが計算されます。xは外部の関数outer_functionの引数xであり、yはadd_5の引数である3です。結果は8となります。
3. クロージャーの特徴
クロージャーは、外部の関数内の変数やパラメータを保存?アクセスすることができます。また、外部の関数を呼び出すたびに、新しいクロージャーが生成されます。
add_10 = outer_function(10) add_20 = outer_function(20) result1 = add_10(5) result2 = add_20(5) print(result1) # 出力結果: 15 print(result2) # 出力結果: 25
この例では、outer_function(10)とouter_function(20)の2回の呼び出しにより、異なる2つのクロージャーadd_10とadd_20が生成されます。それぞれのクロージャーは、異なるxの値を保存しています。
4. クロージャー内での変数の変更
クロージャー内で外部の関数の変数を変更するためには、nonlocalキーワードを使用します。
def outer_function():
x = 0
def inner_function():
nonlocal x
x += 1
return x
return inner_function
increment = outer_function()
print(increment()) # 出力結果: 1
print(increment()) # 出力結果: 2
この例では、outer_function内で変数xを定義し、xを加算して返すinner_functionを定義しています。nonlocalキーワードを使用することで、クロージャー内で外部の関数の変数xを変更することができます。
クロージャーは、状態を保持したい場合や、一部の振る舞いをカプセル化したい場合に有用です。
