Python中的装饰模式如何实现?
2017-07-10 12:20
579 查看
本文和大家分享的主要是python中装饰模式的实现方式相关内容,一起来看看吧,希望对大家学习python有所帮助。
功能目标
编写一个可以打印被装饰函数名称、执行时间、内存地址得装饰器
前置依赖包
import time
import functools
from decorator import decorator
基于普通的函数嵌套
> def log1(fn):
def _wrapper(*args, **kwargs):
start = time.clock()
result = fn(*args, **kwargs)
print("%s is invoked with time consumed: %s seconds at address %s" % (fn.__name__, str(time.time() - start), id(fn)))
return result
return _wrapper
基于@decorator
@decoratordef log(f, *args, **kwargs):
start = time.time()
result = f(*args, **kwargs)
print("%s is invoked with time consumed: %s at address %s" % (f.__name__, str(time.time() - start), id(f)))
return result
使用@functools
def log2(f): @functools.wraps(f)
def wrapper(*args, **kwargs):
start = time.clock()
result = f(*args, **kwargs)
print("%s is invoked with time consumed: %s seconds at address %s" % (f.__name__, str(time.time() - start), id(f)))
return result
return wrapper
测试
@log2def f11(x, y):
return x**y
result = f11(2,3)
print("result:" + str(result))
切换到不同的实现中,他们的效果是相同的。
来源:Linux公社
功能目标
编写一个可以打印被装饰函数名称、执行时间、内存地址得装饰器
前置依赖包
import time
import functools
from decorator import decorator
基于普通的函数嵌套
> def log1(fn):
def _wrapper(*args, **kwargs):
start = time.clock()
result = fn(*args, **kwargs)
print("%s is invoked with time consumed: %s seconds at address %s" % (fn.__name__, str(time.time() - start), id(fn)))
return result
return _wrapper
基于@decorator
@decoratordef log(f, *args, **kwargs):
start = time.time()
result = f(*args, **kwargs)
print("%s is invoked with time consumed: %s at address %s" % (f.__name__, str(time.time() - start), id(f)))
return result
使用@functools
def log2(f): @functools.wraps(f)
def wrapper(*args, **kwargs):
start = time.clock()
result = f(*args, **kwargs)
print("%s is invoked with time consumed: %s seconds at address %s" % (f.__name__, str(time.time() - start), id(f)))
return result
return wrapper
测试
@log2def f11(x, y):
return x**y
result = f11(2,3)
print("result:" + str(result))
切换到不同的实现中,他们的效果是相同的。
来源:Linux公社
相关文章推荐
- python 9-4 如何实现属性可修改的函数装饰器,python3 nolocal或者在python2中列表方式
- 大话设计模式之Python实现【装饰模式】
- python:装饰模式的一个实现
- Python实现装饰模式的一段代码
- Python中实现装饰模式的三种方式
- 设计模式四(装饰模式,采用python 实现)
- python 单例模式----装饰器实现
- python中如何简单的实现decorator模式--由django admin源码所得体会
- Python如何实现单例模式?其他23种设计模式python如何实现?
- 【Python】Python如何实现单例模式?
- python中7种实现单例模式的方法:staticmethod、classmethod、类属性方法、__new__、装饰器、元类、名字覆盖
- Liferay研究之廿四:如何实现配置模式
- 如何利用Composite模式实现多样化的粒子系统
- 如何实现单例模式?
- 明月如何代表我的心 -- 装饰模式
- 装饰模式的两点解释和vb.net实现
- 从我出门来看装饰模式+vb.net实现
- 观察者模式 python实现
- 如何实现从模式窗体-网页对话框 中获得返回值