装饰器小的练习题
import time
import functools
def wos(fc):
@functools.wraps(fc)
def wrap(*args,**kargs):
st=time.time()
res=fc(*args,**kargs)
et=time.time()
print("%s 函数名:%s 运行时间:%.5f,返回值结果%d"%(time.ctime(),add.__name__,et-st,res))
return res
return wrap
@wos
def add(x,y):
time.sleep(1)
return x+y
add(1,10)
判断是否是root用户
def hahaha(fc):
def woshinima(*args):
if args[0]=="root": #args是列表,尽管只有一个元素,但是必须是[0]
return fc(*args)
print("error")
return woshinima
@hahaha
def add_student(name):
print("添加学生信息...")
@hahaha
def del_student(name):
print("删除学生信息...")
add_student("root")
del_student("root")
#############################
import functools
import inspect
def hahaha(fc):
@functools.wraps(fc)
def woshinima(*args,**kwargs):
res=inspect.getcallargs(fc,*args,**kwargs)
if res.get("name")=="root": #自动生成根据形参对应的字典
return fc(*args)
print("error")
return woshinima
@hahaha
def add_student(name):
print("添加学生信息...")
@hahaha
def del_student(name):
print("删除学生信息...")
add_student( "root")
del_student("root")
#################实现判断功能
import functools
def nima(fc):
@functools.wraps(fc)
def wra(*args, **kargs):
for arg in args+tuple(kargs.values()):
if not isinstance(arg ,int):
raise TypeError("必须为整形")
return fc(*args, **kargs)
return wra
@nima
def add(*args, **kwargs):
return sum(args + tuple(kwargs.values()))
print(add(1, 2, 3,a=1,b=1))
print(add(1, 2, 3,a=1,b=1.1))
args:元组
kwargs: