Pythonのクロージャ
クロージャとは一言で説明すると関数内の変数の宣言がその関数が宣言されたスコープと同じものとなります。
具体的には下記のように変数xが関数addと同じスコープで定義されています。
def enclosure(x):
def add(value):
return x + value
return add
f = enclosure(2)
print(f(1)) # 3
最終的な出力される値は3となりenclosureからreturnされたaddが保持されているfではenclosureを実行したときのxの値が記憶されたまま保持されています。
このようにクロージャを用いると変数の値を保持するタイミングと、関数の実行のタイミングを分けることが出来ます。(xが2となったタイミングとaddが実行されたタイミングが異なる)