python 装饰器从放弃到玩转(高级)
2017-02-14 11:30
399 查看
前面说了
计算原有函数的执行时间
利用装饰器如何给原有函数传参
利用装饰器如何接受原有函数的返回值
最后我们说下如何给装饰器传值
举个例子,有的函数我需要统计函数的运行时间,有的函数我需要统计他开始执行的时间,有人会说可以写多个装饰器,这个方法可以,但是这种方法会不会让我们的代码闲的过于臃肿
假设test01需要计算函数的运行时间
看代码
def record_time(key):
def out_warppper(func):
def warpper(*agrs,**Kwagrs):
start_time = time.time()
a = func(*agrs,**Kwagrs)
end_time = time.time()
print "总共用时:" + str(int(end_time) - int(start_time))
return a
return warpper
return out_warpper
@record_time("test01")
def test01(name=name):
time.sleep(3)
print "test"
return name
r = test01("tets01")
print r
解释
@record_time("test01")== test01 = record_time("test01") == out_warpper(test01) == warpper
test01("test01") == warpper("test01")
执行warpper函数
执行原test01函数
可以看到不管是接受原函数的返回值,接受函数传参,装饰器接受参数,只要你真正理解了装饰器的调用原理及方式,都不难实现
计算原有函数的执行时间
利用装饰器如何给原有函数传参
利用装饰器如何接受原有函数的返回值
最后我们说下如何给装饰器传值
举个例子,有的函数我需要统计函数的运行时间,有的函数我需要统计他开始执行的时间,有人会说可以写多个装饰器,这个方法可以,但是这种方法会不会让我们的代码闲的过于臃肿
假设test01需要计算函数的运行时间
看代码
def record_time(key):
def out_warppper(func):
def warpper(*agrs,**Kwagrs):
start_time = time.time()
a = func(*agrs,**Kwagrs)
end_time = time.time()
print "总共用时:" + str(int(end_time) - int(start_time))
return a
return warpper
return out_warpper
@record_time("test01")
def test01(name=name):
time.sleep(3)
print "test"
return name
r = test01("tets01")
print r
解释
@record_time("test01")== test01 = record_time("test01") == out_warpper(test01) == warpper
test01("test01") == warpper("test01")
执行warpper函数
执行原test01函数
可以看到不管是接受原函数的返回值,接受函数传参,装饰器接受参数,只要你真正理解了装饰器的调用原理及方式,都不难实现
相关文章推荐
- python 装饰器从放弃到玩转(中级)
- python 装饰器从放弃到玩转(初级)
- python核心高级学习总结8------动态性、__slots__、生成器、迭代器、装饰、闭包
- Python闭包的高级应用-装饰器的实现
- python高级之装饰器
- Python的高级特性7:闭包和装饰器
- python 生成器从放弃到玩转
- python -- 装饰器的高级应用
- python高级编程-装饰器学习笔记
- Python高级编程--闭包与装饰器
- 从0开始学quantum之1:Python高级特性--装饰器
- Python中装饰器高级用法详解
- python -- 装饰器的高级应用
- Python高级 -- 11 闭包、装饰器
- Python闭包的高级应用-装饰器的实现
- 第二篇:python高级之装饰器
- 【Python】[高级特性]切片,迭代,列表生成式,生成器,迭代器
- python高级: 解析式、生成器
- python学习笔记(6)-高级特性(二)-迭代
- python高级学习笔记