如果明白裝飾器的原理那麼帶引數的裝飾器就很容易理解了
**:
defs1(func):
definner(a,b): #f1=inner(a,b) 接受2個引數,然後在把2個引數傳遞給func(a,b)
print("
hello")
r =func(a,b)
print("
word")
return
r
return
inner
@s1def
f1(a,b):
print(a+b)
f1(20,50)
現在有個問題如果裝飾的函式有的引數是1個有的是2個怎麼辦?
@s1deff1(a):
print(a+b)
@s1def
f2(a,b):
print(a+b)
@s1def
f3(a,b,c):
print(a+b)
解決這個很簡單:
defs1(func):
def inner(*args,**kwargs): #接受萬能引數
print("
hello")
r =func(*args,**kwargs) #這樣寫可以把引數對應到底層函式的形參數量。比如*args接受引數後是元組(10,20),f2(a,b) args會自動將元組拆解開。
#等同於這樣f3(10,20)
print("
word")
return
r
return
inner
@s1def
f1(a):
(a)@s1
deff2(a,b):
(a,b)
@s1def
f3(a,b,c):a
a,b,c
f1("
f1===a
") #
傳遞乙個引數
f2(10,20) #
傳遞2個引數
f3(11,22,) #
傳遞三個引數
裝飾器帶引數
裝飾器帶引數 帶引數的裝飾器是三層的 最外層的函式負責接受裝飾器引數 裡面的內容還是源裝飾器的內容 def outer a 第一層 負責接受引數的 defdecorate func 第二層 負責接受函式的 def wargs,kwargs 第三層 負責接受函式的引數 func wargs print...
python 帶引數裝飾器
在前面一文 python裡為什麼需要使用裝飾器 decorator 裡,我們學習了為什麼需要裝飾器,知道裝飾器就是為了不修改原來函式的 又達到增加功能的作用。其實為了裝飾器更通用化,那麼裝飾器是否也可以帶引數呢?其實是可以的,這樣更加通用化了,達到共享極點。在前面也學習 為什麼要使用閉包 closu...
帶引數的裝飾器
一 帶引數的裝飾器 import functools import time def log kind def add log fun functools.wraps fun start time time.time res fun args,kwargs end time time.time ki...