加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱故事小小网_铜陵站长网 (http://www.0562zz.com/)- 视频终端、云渲染、应用安全、数据安全、安全管理!
当前位置: 首页 > 教程 > 正文

Python中实现装饰模式的三种办法

发布时间:2021-12-08 14:38:47 所属栏目:教程 来源:互联网
导读:Python中实现装饰模式的三种方式 功能目标 编写一个可以打印被装饰函数名称、执行时间、内存地址得装饰器 前置依赖包 import time import functools from decorator import decorator 基于普通的函数嵌套 def log1(fn): def _wrapper(*args, **kwargs): star

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))
切换到不同的实现中,他们的效果是相同的。

(编辑:我爱故事小小网_铜陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读