Python 入門 ノート (45)クロージャー

クロージャー

クロージャー(関数閉法)外側の変数を記憶した関数  

 

関数 outer の戻り値に innnerと記述して、実行しないでいると、innner のオブジェクト情報が返ってきます。

def outer(a, b):
    def inner():
        return a + b
    return inner
print(outer(1, 2))

<function outer.<locals>.inner at 0x7fae2d6c7050>

innner 関数がまだ実行されていない状態です。(a + b が計算されていない状態)

 

変数 f にouter関数を代入し、f を f() で実行すると、outer 関数が実行されます。

def outer(a, b):
    def inner():
        return a + b
    return inner
f = outer(1, 2)
r = f()
print(r)

 

円の面積計算関数 circle_area_func() で、初めに pi を設定しておいて、後ほど pi の値の変化に応じて結果を返してみます。

def circle_area_func(pi):
    def circle_area(radius):
        return pi * radius * radius
    return circle_area
ca1 = circle_area_func(3.14)
ca2 = circle_area_func(3.141592)
print(ca1(10))
print(ca2(10))

314.0
314.1592

 

クロージャーの簡単な説明でした。

 

コメント