[英]Tracking recursion depth with Python decorators
我正在嘗試編寫一個裝飾器,以跟蹤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
但我猜不是嗎?
指針將不勝感激。
您可以為裝飾器指定級別變量,然后在函數調用中使用它,如下所示:
def visualise(func):
visualise.level = 0
def wrapper(*args, **kwargs):
print("In:", visualise.level)
visualise.level += 1
result = func(*args, **kwargs)
visualise.level -= 1
print("Out:", visualise.level)
return result
return wrapper
您是否可以定義以下功能?
def fib(n, count=0):
# ....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.