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
但我不明白它是如何在语句的同一个变量上分配两个函数的:
fib = trace(fib)
fib = memoize(fib)
print fib(4)
trace 和 memoize 似乎都对最后一次通话有影响。这是为什么?