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

  • 相关阅读:
    数组模拟队列实现
    Vue之模板语法
    初识Vue之helloworld
    二、Lambda表达式
    一、函数式编程
    SpringCloudAlibaba之Nacos
    SpringCloudAlibaba之Sentinel
    spring的随笔2
    spring的小想法1
    关于hibernate的一些看法
  • 原文地址:https://www.cnblogs.com/yhleng/p/9804113.html
Copyright © 2011-2022 走看看