• functools.wraps装饰器的作用


    原文: https://www.dazhuanlan.com/2019/12/26/5e0409c45a205/

    对比测试
    先看一个未使用functools.wraps的装饰器:

    def time_consuming_deco(func):
        """
        计算运行func函数所消耗的时间
        """
        def wrapper(*args, **kwargs):
            start = time.time()*1000
            func(*args, **kwargs)
            end = time.time()*1000  # 转换成毫秒
            print('{0} time consuming: {1} ms'.format(func.__name__, end - start))
        return wrapper
    

    下面使用上面的装饰器:

    @time_consuming_deco
    def f():
        for i in range(1000000):
            pass
    
    f()
    print("f.__name__ :", f.__name__)
    

    运行结果为:

    f time consuming: 22.99853515625 ms
    f.__name__ : wrapper
    

    再看一个使用了functools.wraps的装饰器:

    def time_consuming_deco(func):
        """
        还是上面计算运行func函数所消耗的时间的装饰器,只不过是用使用了functools.wraps
        """
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            start = time.time()*1000
            func(*args, **kwargs)
            end = time.time()*1000  # 转换成毫秒
            print('{0} time consuming: {1} ms'.format(func.__name__, end - start))
        return wrapper
    

    再次运行上面的测试程序结果如下:

    f time consuming: 22.99853515625 ms
    f.__name__ : f
    

    小结
    通过使用functools.wraps可以避免自定义装饰器对所装饰函数造成的函数名影响,防止在后面需要使用函数名的时候造成混乱.

  • 相关阅读:
    PHP-会话控制
    PHP-文件上传
    PHP-文档目录
    PHP-正则表达式
    PHP-数组类型
    PHP-函数编程
    PHP-基础知识
    $_FILES系统函数
    话说 MAX_FILE_SIZE
    Hello~! 我的blog
  • 原文地址:https://www.cnblogs.com/marsggbo/p/14814859.html
Copyright © 2020-2023  润新知