给出以下代码,我不明白为什么f和fib行为不同。 从巴克利所采取的示例cs61a当然Python高阶函数
def fib(n):
if n==1 or n==0:
return n
else:
return fib(n-1) + fib(n-2)
def decor(f):
def counted(*args):
counted.call_count += 1
return f(*args)
counted.call_count = 0
return counted
当我加载代码到解释器我得到这样的输出:
>>> fib(6)
8
>>> f = decor(fib)
>>> fib = decor(fib)
>>> # f and fib are both vars that represents a decorated fib function
>>> f(6)
8
>>> f.call_count # why 1 ???
1
>>>
>>> fib(6)
8
>>> fib.call_count # 49 calls, that's fine
49
是否意味着fib在全球范围内是相同的?我假设绑定fib再装饰(纤维)返回一个新的功能,这是不相关的'旧'纤维,正如f所做的......是什么特定于python?让我想我想念一些基本的语言理解。似乎很明显,rebind fib应该返回f – chenchuk