python如何裝飾遞迴函式

2021-08-08 21:06:16 字數 838 閱讀 5743

裝飾函式printtime——列印遞迴函式執行時間

def

printtime

(func):

@wraps(func):

def(*args,**kwargs):

start=time()

print(func(*args,**kwargs))

end=time()

print("spent time:%s"%(end-start))

遞迴函式n!

def

f(n):

if n==1:return

1return n*f(n-1)

如果此時:

@printtime

deff

(n):

……

一定會出現bug,講裝飾器執行太多次!!!

將遞迴函式多定義一層函式

@printtime

deff

(n):

def_f

(n):

if n==1:return

1return n*f(n-1)

return _f(n)

#輸入:

f(10)

#輸出:

3628800

spent time:0.0

原因是:此時裝飾器裝飾的是f(n),而不是_f(n)。也就是說,f(10)這麼執行的: 計算 _f(10)這個值,return了這個值。

python群:190341254

丁。

python 函式裝飾 Python 函式裝飾器

無引數的 函式裝飾器 funa 作為裝飾器函式 def funa fn print sakura func a fn 執行傳入的fn引數 print sakura second return sakura return funa def funb print sakurab 返回結果為 sakura...

python 函式裝飾 Python 函式裝飾器

首次接觸到裝飾器的概念,太菜啦!python 裝飾器可以大大節省 的編寫量,提公升 的重複使用率。函式裝飾器其本質也是乙個函式,我們可以把它理解為函式中定義了乙個子函式。例如我們有這麼乙個需求,每次執行乙個函式後,需要知道這個函式執行了多長時間。一般情況下,我會這樣寫 defaccumulate n...

Python之遞迴函式與裝飾器

遞迴函式 在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。遞迴函式特性 必須有乙個明確的結束條件 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少 相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備 通常前一次的輸出就作為後一次的輸入 遞迴效率不高,遞迴...