zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    清除浮动
    版心和布局流程
    浮动(float)
    盒子模型(CSS重点)
    CSS 三大特性
    CSS 背景(background)
    移动web开发之rem布局
    .移动端常见布局
    移动端基础
    CSS高级技巧
  • 原文地址:https://www.cnblogs.com/yhleng/p/9804113.html
Copyright © 2011-2022 走看看