zoukankan      html  css  js  c++  java
  • python 函数装饰器

    # 使用一个函数来装饰另一个函数,不使用@
    
    def a_new_decorator(a_func):
    
        def wrapTheFunc():
            print("Do sth. before a_func()")
    
            a_func()
    
            print("Do sth. after a_func()")
    
        return wrapTheFunc
    
    
    def a_func_requiring_decoration():
        print("I need some decoration")
    
    a_func_requiring_decoration = a_new_decorator(a_func_requiring_decoration)
    
    a_func_requiring_decoration()
    # 输出如下:
    # Do sth. before a_func()
    # I need some decoration
    # Do sth. after a_func()
    # 使用@来运行上面的代码
    
    def a_new_decorator(a_func):
    
        def wrapTheFunc():
            print("Do sth. before a_func()")
    
            a_func()
    
            print("Do sth. after a_func()")
    
        return wrapTheFunc
    
    @a_new_decorator
    def a_func_requiring_decoration():
        print("I need some decoration")
    
    # a_func_requiring_decoration = a_new_decorator(a_func_requiring_decoration)
    
    a_func_requiring_decoration()
    the @a_new_decorator is a just a short way of saying:
    a_func_requiring_decoration = a_new_decorator(a_func_requiring_decoration)
    # 希望print(xx.__name__)的结果是xx,而不是wrapTheFunc
    # 使用functools.wraps来解决此问题
    
    from functools import wraps
    
    
    def a_new_decorator(a_func):
        @wraps(a_func)
        def wrapTheFunc():
            print("Do sth. before a_func()")
    
            a_func()
    
            print("Do sth. after a_func()")
    
        return wrapTheFunc
    
    @a_new_decorator
    def a_func_requiring_decoration():
        print("I need some decoration")
    
    # a_func_requiring_decoration = a_new_decorator(a_func_requiring_decoration)
    
    a_func_requiring_decoration()
    
    print(a_func_requiring_decoration.__name__)

    注意:@wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性。

  • 相关阅读:
    IIs6基础上发布WebApi注意事项
    VS2010下开发WebApi 基本步骤
    C# 两个datatable中的数据快速比较返回交集或差集
    myeclipse快捷键使用
    Java中时间
    数组排序后插入
    所有的jsp页面都放到WEB-INF目录
    jsp内置对象浅谈
    JSP九大内置对象的作用和用法总结?
    JSP九大内置对象及四个作用域
  • 原文地址:https://www.cnblogs.com/karl-python/p/14626891.html
Copyright © 2011-2022 走看看