# 编写装饰器required_types, 条件如下:
# 1). 当装饰器为@required_types(int,float)确保函数接收到的每一个参数都是int或者float类型;
# 2). 当装饰器为@required_types(list)确保函数接收到的每一个参数都是list类型;
# 3). 当装饰器为@required_types(str,int)确保函数接收到的每一个参数都是str或者int类型;
# 4). 如果参数不满足条件, 打印 TypeError:参数必须为xxxx类型
import functools
def required_types(*kind): ##此处是不定长参数,所以加‘*’
def require(fun):
@functools.wraps(fun)
def wapper(*args,**kwargs):
for i in args:
if not isinstance(i,kind):
print('函数所有参数并非',kind)
break
else:
res = fun(*args,**kwargs)
return res
return wapper
return require
@required_types(int,float)
def mymax(a,b,c):
return max(a,b,c)
print(mymax(1,2.4,3))
# import functools
# import time
# def log(kind):
# def add_log(fun):
# @functools.wraps(fun)
# def wapper(*args,**kwargs):
# start_time =time.time()
# res = fun(*args,**kwargs)
# end_time = time.time()
# print('<%s> [%s] 函数名:%s,运行时间:%.5d,运行返回值结果 :%d'
# %(kind,time.ctime(),fun.__name__,end_time-start_time,res))
# return res
# return wapper
# return add_log
# @log('debug')
# def add(x,y):
# time.sleep(1)
# return x+y
# print(add(1,2))
带参数的装饰器
最新推荐文章于 2021-07-13 13:24:10 发布