裝飾器 帶引數

2022-06-26 09:24:11 字數 1164 閱讀 2973

如果明白裝飾器的原理那麼帶引數的裝飾器就很容易理解了

**:

def

s1(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個怎麼辦?

@s1

deff1(a):

print(a+b)

@s1def

f2(a,b):

print(a+b)

@s1def

f3(a,b,c):

print(a+b)

解決這個很簡單:

def

s1(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):

print

(a)@s1

deff2(a,b):

print

(a,b)

@s1def

f3(a,b,c):a

print

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...