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

  • 相关阅读:
    LeetCode Arithmetic Slices
    LeetCode Number of Longest Increasing Subsequence
    LeetCode Longest Increasing Subsequence
    shrio注解的方式进行权限控制
    30分钟学会如何使用Shiro(转自:http://www.cnblogs.com/learnhow/p/5694876.html)
    eclipse逆向生成实体类
    redis2.3.7安装时出现undefined reference to `clock_gettime'
    使用Nginx+Lua(OpenResty)开发高性能Web应用
    shrio初体验(2)Realm
    shrio初体验(1)
  • 原文地址:https://www.cnblogs.com/karl-python/p/14626891.html
Copyright © 2011-2022 走看看