关于Python的装饰器 decorator

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Python的装饰器 decorator相关的知识,希望对你有一定的参考价值。

语法格式是固定的:先定义一个函数,再使用@语法调用该函数。

例子一:

import functools 


# 定义装饰器,固定格式
def log(func):
    @functools.wraps(func) # 将func的一些属性赋予wrapper,如__name__
    def wrapper(*args, **kw):
        print(before function %s % func.__name__)
        func(*args, **kw)
        print(after function %s % func.__name__)

    return wrapper


@log # 使用装饰器,固定格式
def run(words):
    print(words)


# 执行被装饰的函数
run(abc)

上面是最简单的装饰器,就是在目标函数执行前后输出一些语句。个人认为,这与Java中的aop编程完全是一回事,如果你明白 [aop]+[注解] 编程,那很容易触类旁通。

除了例子一这种简单的装饰器,有时候还需要让装饰器接收一些参数 -- 类似于Java的注解参数,这时候就要多一重嵌套了:

# 如果decorator本身需要接收参数(非被装饰的函数)
def log2(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print(%s %s(): % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

@log2(execute)
def now2():
    print(2017-02-03)

now2()    

print(now.__name__) # 没有使用@functool.wraps(func),所以~~

 

 

 

 

 

ps:本文的案例模板来自廖学峰的Python3教程

以上是关于关于Python的装饰器 decorator的主要内容,如果未能解决你的问题,请参考以下文章

python之装饰器(decorator)

Python进阶装饰器(Decorator)

python--decorator装饰器

Python – 装饰器(Decorator)

python装饰器Decorators

python 装饰器 Decorator