• python装饰器扩展之functools.wraps


    我们知道函数被装饰器,装饰后,所有的属性,以及内置函数就失效了。

    原因是函数类型变成了warpper类型

    示例1:不带wraps装饰器示例

    def warfunc(func):
        def warpper(*args,**kwargs):
            print('warpper demo')
            ret = func(*args,**kwargs)
            return ret
        return warpper
    
    
    @warfunc
    def demofunc():
        print('func demo')
    
    demofunc()
    print(demofunc)

    输出结果:

    D:python36python3.exe D:/untitled4/temp7.py
    warpper demo
    func demo
    <function warfunc.<locals>.warpper at 0x035432B8>

    **从输出结果标记红色部分可以看出,这个函数类型是一个warpper装饰器。那么内置函数也失效了。如help(demofunc())

    示例2:带wraps装饰器的

    from functools import wraps
    
    def warfunc(func):
        @wraps(func)
        def warpper(*args,**kwargs):
            print('warpper demo')
            ret = func(*args,**kwargs)
            return ret
        return warpper
    
    
    @warfunc
    def demofunc():
        print('func demo')
    
    demofunc()
    print(demofunc)

    输出结果:

    D:python36python3.exe D:/untitled4/temp7.py
    warpper demo
    func demo
    <function demofunc at 0x038632B8>

    **从输出结果标记红色部分,可以看出,这个类型是一个funciton;需要注意的引用包from functools import wraps

  • 相关阅读:
    test deploy
    SpringBoot+Spring Session+Redis实现Session共享及踩坑记录
    登录接口取cookie
    pycharm设置自动调节字体大小
    ClickHouse高可用集群
    clickhouse 常用命令(三)
    clickHouse常用命令(一)
    ClickHouse表引擎
    clickhouse基本数据类型
    手写滚动条设计----直接粘贴
  • 原文地址:https://www.cnblogs.com/yhleng/p/9804113.html
Copyright © 2020-2023  润新知