python:装饰器

Posted 冰皮抹茶

tags:

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

python装饰器的前提是Python 中的函数和 Java、C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数,例如:

def foo():
    print("foo")

def bar(func):
    func()

bar(foo)

概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。首先,需要定义一个装饰器函数,接受另外一个函数作为参数:

def use_logging(level):
    def decorator(func):
        def wrapper(*args, **kwargs):
            if level == "warn":
                logging.warn("%s is running" % func.__name__)
            elif level == "info":
                logging.info("%s is running" % func.__name__)
            return func(*args)
        return wrapper

    return decorator

 

通过@调用装饰器修饰函数:

@use_logging(level="warn")
def foo(name=foo):
    print("i am %s" % name)

foo()

上面的 use_logging 是允许带参数的装饰器。它实际上是对原有装饰器的一个函数封装,并返回一个装饰器。我们可以将它理解为一个含有参数的闭包。当我 们使用@use_logging(level="warn")调用的时候,Python 能够发现这一层的封装,并把参数传递到装饰器的环境中。

@use_logging(level="warn")等价于@decorator

 

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

[TimLinux] Python 装饰器

python装饰器

python装饰器关键代码

Python装饰器

python之装饰器

python 装饰器