gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:51 25 4
gpt4 key购买 nike

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)

关于python - 是否可以将两个高阶函数的返回值分配给 Python 中的同一个变量?[查看详情],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10150913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com