帶引數的裝飾器

2021-09-13 19:27:02 字數 1219 閱讀 9611

一、帶引數的裝飾器

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

(kind,time.ctime(),fun.__name__,end_time-start_time,res))

return res

return add_log

@log('debug')

def add(x,y):

time.sleep(1)

return x+y

print(add(1,2))

二、帶引數的裝飾器練習

# 編寫裝飾器required_types, 條件如下:

# 1). 當裝飾器為@required_types(int,float)確保函式接收到的每乙個引數都是int或者float型別;

# 2). 當裝飾器為@required_types(list)確保函式接收到的每乙個引數都是list型別;

# 3). 當裝飾器為@required_types(str,int)確保函式接收到的每乙個引數都是str或者int型別;

# 4). 如果引數不滿足條件, 列印 typeerror:引數必須為***x型別

"""import functools

def required_type(*kinds):

def required(fun):

@functools.wraps(fun)

for i in args:

if not isinstance(i,kinds):

print('函式所有引數並非',kinds)

break

else:

res = fun(*args,**kwargs)

return res

return required

@required_type(str)

def mymax(a,b,c,d):

return max(a,b,c,d)

print(mymax(1,2.5,8,9))

裝飾器帶引數

裝飾器帶引數 帶引數的裝飾器是三層的 最外層的函式負責接受裝飾器引數 裡面的內容還是源裝飾器的內容 def outer a 第一層 負責接受引數的 defdecorate func 第二層 負責接受函式的 def wargs,kwargs 第三層 負責接受函式的引數 func wargs print...

裝飾器 帶引數

如果明白裝飾器的原理那麼帶引數的裝飾器就很容易理解了 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 s1...

帶引數的裝飾器

usr bin python3 from inspect import signature def check type ty args,ty kwargs 通過signature方法,獲取函式形參 name,age,height sig signature func 獲得裝飾器傳來的引數,函式簽名...