zoukankan      html  css  js  c++  java
  • 装饰器-wraps

    Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring。
    不加wraps:

    #coding=utf-8
    # -*- coding=utf-8 -*- 
    from functools import wraps   
    def my_decorator(func):
        def wrapper(*args, **kwargs):
            '''decorator'''
            print('Calling decorated function...')
            return func(*args, **kwargs)
        return wrapper  
     
    @my_decorator 
    def example():
        """Docstring""" 
        print('Called example function')
    print(example.__name__, example.__doc__)
    
    

    执行结果

    ('wrapper', 'decorator')
    [Finished in 0.2s]

    加wraps:

    #coding=utf-8
    # -*- coding=utf-8 -*- 
    from functools import wraps   
    def my_decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            '''decorator'''
            print('Calling decorated function...')
            return func(*args, **kwargs)
        return wrapper  
     
    @my_decorator 
    def example():
        """Docstring""" 
        print('Called example function')
    print(example.__name__, example.__doc__)

    执行结果:

    ('example', 'Docstring')
    [Finished in 0.5s]

    原文链接:

    https://blog.csdn.net/hqzxsc2006/article/details/50337865
  • 相关阅读:
    PRISM概率模型检测器初使用--骰子模型(改进版)
    什么是P问题、NP问题和NPC问题
    kali linux进行arp欺骗和dos攻击
    java log日志的输出。
    sublime text3输入中文的问题.
    java 正则表达式匹配字符串
    python tornado+mongodb的使用
    jasper3
    jasper2
    jasper
  • 原文地址:https://www.cnblogs.com/li33232/p/11439571.html
Copyright © 2011-2022 走看看