首页 > 代码库 > python 装饰器从放弃到玩转(中级)
python 装饰器从放弃到玩转(中级)
前面我们说到装饰器的初步使用
需求一:
那我现在有个需求,原函数是这样的
def test1():
a = "test1"
time.sleep(3)
return a
可以看到是有返回值的,可我们之前的装饰器,并没有处理原函数的返回值的逻辑,那么我现在怎么办,看代码
def record_time(func):
def warpper():
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
返回各自的结果
本文出自 “expect批量同步数据” 博客,请务必保留此出处http://4249964.blog.51cto.com/4239964/1897532
python 装饰器从放弃到玩转(中级)