Python中实现装饰模式的三种方式
2017-05-30 22:06
627 查看
功能目标
编写一个可以打印被装饰函数名称、执行时间、内存地址得装饰器前置依赖包
import timeimport 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
@decorator def 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
测试
@log2 def f11(x, y): return x**y result = f11(2,3) print("result:" + str(result))
切换到不同的实现中,他们的效果是相同的。
相关文章推荐
- 谈谈下订单的几种实现方式(用不同的模式实现:装饰器模式、代理模式、命令模式、状态模式、模版模式)
- 消费者模式的三种实现方式
- python 9-4 如何实现属性可修改的函数装饰器,python3 nolocal或者在python2中列表方式
- 基于Python中单例模式的几种实现方式及优化详解
- 设计模式之单例模式(三种实现方式)
- 订单的几种实现方式(用不同的模式实现:装饰器模式、代理模式、命令模式、状态模式、模版模式)
- 谈谈下订单的几种实现方式(用不同的模式实现:装饰器模式、代理模式、命令模式、状态模式、模版模式)
- 分别用的列表,递归,生成器三种方式创建出n个元素的斐波那契数列(Python3实现)
- python 单例模式----装饰器实现
- Python中的单例模式的几种实现方式的及优化
- 三种单例模式的实现方式
- 5种Python单例模式的实现方式
- 【计算机网络】关于三种网络通信模式以及java中三种通信方式的实现介绍
- python中7种实现单例模式的方法:staticmethod、classmethod、类属性方法、__new__、装饰器、元类、名字覆盖
- 设计模式四(装饰模式,采用python 实现)
- python实现堆排序的三种方式
- 大话设计模式之Python实现【装饰模式】
- 5种Python单例模式的实现方式
- 扩展类的三种方式(继承,装饰模式,动态代理)
- Python中的装饰模式如何实现?