给装饰器传递指定类型的参数
import functools
def aaa(*c):
def required_ints(f):
@functools.wraps(f)
def wrapper(*args,**kwargs):
for arg in args:
if not isinstance(arg,c):
# raise TypeError('参数必须为整形')
print("erroe")
break
else:
return f(*args,**kwargs)
return wrapper
return required_ints
@aaa(int,float) #里面是或的意思
def add(*args):
return sum(args)
print(add(1,2,3,65,67,5.2))
多个装饰器的执行顺序
def denglu(f):
def deng(a):
if a=="root":
print("mima1")
res=f(a)
return res
return deng
def panduan(f):
def pan(a):
if a=="root":
print("root2")
res=f(a)
return res
return pan
@denglu
@panduan
def user(a):
print("%s登陆成功3"%a)
user("root")
结果
mima1
root2
root登陆成功3
装饰器可以多次调用,多次执行
def denglu(f):
def deng(a):
if a=="root":
print("mima1")
res=f(a)
return res
return deng
def panduan(f):
def pan(a):
if a=="root":
print("root2")
res=f(a)
return res
return pan
@denglu
@panduan
@denglu
@denglu
@denglu
@denglu
def user(a):
print("%s登陆成功3"%a)
user("root")