欢迎访问宙启技术站
智能推送

Pythonでのクロージャーの使い方

发布时间:2023-07-06 08:05:07

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であり、yadd_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_10add_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を変更することができます。

クロージャーは、状態を保持したい場合や、一部の振る舞いをカプセル化したい場合に有用です。