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で自分で定義したオブジェクトから値を取得したり更新したり削除したりしたい時の 動作を定義することができる機能