你好,游客 登录 注册 搜索
背景:
阅读新闻

Python中实现装饰模式的三种方式

[日期:2017-07-06] 来源:Linux社区  作者:blueheart20 [字体: ]

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

@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中的re模块--正则表达式  http://www.linuxidc.com/Linux/2017-06/145207.htm

Python文件操作及seek偏移详解  http://www.linuxidc.com/Linux/2017-07/145384.htm

Python多线程和多进程谁更快?  http://www.linuxidc.com/Linux/2017-06/145154.htm

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-07/145466.htm

linux
相关资讯       Python装饰模式 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款