前面咱们说到装饰器的初步使用ide
需求一:
函数
那我如今有个需求,原函数是这样的内存
def test1():ci
a = "test1"
it
time.sleep(3)class
return atest
能够看到是有返回值的,可咱们以前的装饰器,并无处理原函数的返回值的逻辑,那么我如今怎么办,看代码im
def record_time(func):装饰器
def warpper():dict
start_time = time.time()
a = func()
end_time = time.time()
print "总共用时:" + str(int(end_time) - int(start_time))
return a
return warpper
@record_time
def test1():
a = "test1"
time.sleep(3)
return a
r = test1()
print r
步骤解释:
@record_time== test1=record_time(test1)=warpper
r = test1()
test1() == warpper()
里面直接return了原test1函数的返回值
r = 原test1的返回值
需求一:
def test1(name):
a = name
time.sleep(3)
return a
def test2(name,age):
a = name
b = age
dict = {}
dict["name"] = a
dict["age"] = age
time.sleep(3)
return dict
我如今的函数须要传值,而且每一个函数可能传的参数不是固定的,要求记录函数的执行时间
请看实现的代码以下
def record_time(func):
def warpper(*args,**kwargs):
start_time = time.time()
a = func()
end_time = time.time()
return a
return warpper
@record_time
def test1(name):
a = name
time.sleep(3)
return a
@record_time
def test2(name=name ,age=age):
a = name
b = age
dict = {}
dict["name"] = a
dict["age"] = age
time.sleep(3)
return dict
r = test1("test01")
r1 = test2("test02",20)
print r,r1
解释:
@record_time == test1 = record_time(test1) = warpper(前面忘讲了,这个就是warpper的内存地址)
@record_time == test2 = record_time(test2) = warpper
test1("test01")== warpper("test01"),而warpper函数能够容许你传入不固定参数*agrs(元祖)和关键字参数(**kwargs)
warpper中执行了原来的test01和test02
返回各自的结果