Python 関数内関数 クロージャ

Python

関数内関数

def test():
  print('hello')

def run(func):
  func()
  print('run')

実行

hello
run

*args、**kwargsも組み合わせが可能。

def outer(a, b):
    def inner(c, d):
        return (c + d) * 10

    out = a + b
    in = inner(a, b)

    print("a =", a, ",", "b =", b, ",", " out =", outfunc, ",", "in =" ,infunc)

outer(1,2)
a = 1 , b = 2 ,  out = 3 , in = 30

複雑な処理を実行したい場合に利用できる。

def func(a, b):
    
         def sum():
             return a + b
    
         def differ():
             return a - b
func(2, 3) # -> (5, -1)

注意 内側の関数を呼び出そうとするとエラーが発生するので注意。

def sum(1,2) => error

クロージャとは

関数の外で作成されて、関数の外側で与えられた変数の値を記憶することができる関数。

def function(a):   

    def closure(b):
        return a + b
    return closure

test_closure = function(3)
print(test_closure(4)) # -> 7

クロージャは宣言するグローバル変数の削減に役立ちます。

a = 3

def none_clos(b):

    return a + b

test_none_clos = none_clos(4)
print(test_none_clos) # -> 7

参照

Pythonで関数内で関数の定義と呼び出しをする方法を解説 - Tech-boost-magazine

プロパティについて理解したのでまとめる - nametake-blog

@property pythonで自分で定義したオブジェクトから値を取得したり更新したり削除したりしたい時の 動作を定義することができる機能

pythonで自分で定義したオブジェクトから値をCRUDするときの動作を定義することができる