Skip to main content
 首页 » 编程设计

python之是否可以将两个高阶函数的返回值分配给 Python 中的同一个变量[查看详情]

2025年05月04日15rubylouvre

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 似乎都对最后一次调用有影响。这是为什么?

请您参考如下方法:

你写的很像

fib2 = memoize(trace(fib)) 
print fib2(4) 

因为你在调用trace后改变了变量fib指向的函数,所以memoize被应用到跟踪版本(然后 fib 再次被“覆盖”)。

如果你想分别有一个跟踪版本和一个内存版本,你需要将它们的结果分配给不同的变量,例如:

fib_trace = trace(fib) 
fib_memo = memoize(fib) 
print fib_trace(4), fib_memo(4)