http://pythonprogramming.jottit.com/functional_programmingにチュートリアルがあり、高階関数を使用して関数を返す方法の例を示しています。
def trace(f):
f.indent = 0
def g(x):
print '| ' * f.indent + '|--', f.__name__, x
f.indent += 1
value = f(x)
print '| ' * f.indent + '|--', 'return', repr(value)
f.indent -= 1
return value
return g
と
def memoize(f):
cache = {}
def g(x):
if x not in cache:
cache[x] = f(x)
return cache[x]
return g
しかし、ステートメントの同じ変数に2つの関数を割り当てる方法がわかりません:
fib = trace(fib)
fib = memoize(fib)
print fib(4)
trace と memoize の両方が最後の呼び出しに影響を与えているようです。何故ですか?