python裝飾器 如何使用函式裝飾器

2021-09-26 01:31:22 字數 1005 閱讀 3504

問題舉例

有時候我們想為多個函式統一新增某種功能,比如計時統計、記錄日誌,快取運算結果等;

我們並不想在每個函式內一一新增完全相同的**,有什麼解決方案嗎?

定義裝飾器函式,用它在原函式的基礎上生成乙個新增新功能的函式來代替原函式

**

def

memo(func):

cache ={}

def wrap(*args):

res =cache.get(args)

ifnot

res:

res = cache[args] = func(*args)

return

res

return

wrap

#[題目1] 斐波那契數列(fibonacci sequence):

#f(0)=1,f(1)=1, f(n)=f(n-1)+f(n-2)(n>=2)

#1, 1, 2, 3, 5, 8, 13, 21, 34, ...

#求數列第n項的值?

@memo

deffibonacci(n):

if n <= 1:

return 1

return fibonacci(n-1) + fibonacci(n-2)

#fibonacci = memo(fibonacci)

print(fibonacci(50))

#[題目2] 走樓梯問題

#有100階樓梯, 乙個人每次可以邁1~3階. 一共有多少走法?

@memo

defclimb(n, steps):

count =0

if n ==0:

count = 1

elif n >0:

for step in

steps:

count += climb(n-step, steps)

return

count

print(climb(100, (1,2,3)))

如何使用函式裝飾器?

需求 某些時候我們想為多個函式,統一新增某種功能,比如計時統計 日誌記錄 快取運算結果等等 我們不想在每個函式內一一新增完全相同的 有什麼好的解決方案?思路 定義裝飾器函式,用它來生成乙個在原函式基礎上新增了新功能的函式,替代原函式 def memo func cache def wrap args...

Python中如何使用裝飾器

把乙個函式當作引數,返回乙個替代版的函式 本質就是乙個返回函式的函式 在不改變原函式的基礎上,給函式增加功能 函式對修改是封閉的,對擴充套件是開放的 也就是說,是給乙個已經寫好的函式進行修改時,並不改變這個已經寫好的函式,而是再寫乙個函式來進行呼叫這個函式,但是在原本已經呼叫過這個函式的位置不能一一...

python中如何使用裝飾器

1.如果裝飾器是多層的,誰距離函式最近,則優先使用那個裝飾器 新增校驗功能的裝飾器 import time def verify1 t def decorate func print 第一層校驗正在進行中.time.sleep t print 校驗完畢!呼叫原函式 func args,kwargs ...