以下は、メモ型階乗関数の簡単な例です。それは正常に動作し、私は基本的なコンセプトを理解していますが、一つの詳細は私を混乱させる。変数memory
はどこにありますか? memoize()
の実行が終了しても、それはなぜ持続しますか? print memory
のようなことはできないので、グローバル変数ではないようです。ここで何が起こっているのですか?memoized python関数のキャッシュはどこにありますか?
def memoize(f):
memory = {}
def memoized(*args):
if args not in memory:
memory[args] = f(*args)
return memory[args]
return memoized
@memoize
def fact(n):
if n <= 1:
return 1
return n * fact(n - 1)
print fact(10)
[closure](https://en.wikipedia.org/wiki/Closure_)に存在します。 (computer_programming)) 'fact 'をラップする –
関数を別の関数の中に宣言すると、内部関数は外部関数で宣言されたすべての変数を見ることができます。閉鎖と呼ばれています。 – Gabriel