【发布时间】:2019-01-12 09:07:51
【问题描述】:
我正在尝试编写一个装饰器来跟踪 Python 中递归函数的递归深度。
以递归函数为例,
def fib(n):
if n == 0:
return 0
if n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
通常,要跟踪递归深度,您可以这样写
def fib(n, level=0):
print(level)
if n == 0:
return 0
if n == 1:
return 1
else:
return fib(n-1, level=level+1) + fib(n-2, level=level+1)
然而,在摆弄了一段时间的装饰器和大量的谷歌搜索之后,我不确定这是否可能。
我尝试过类似的东西
def visualise(func):
def modify(*args, **kwargs):
kwargs["count"] += 1
print(kwargs["count"])
return func(*args, **kwargs)
return modify
@visualise
def fib(n):
...
fib(4, count=0)
但它抱怨count 是一个意外的关键字参数,我不太明白,因为我的印象是包装器modify 替换了所有出现的fib,但我猜不是?
我们将不胜感激。
【问题讨论】:
-
问题是你将
kwargs传递给被包装的函数
标签: python recursion decorator