码迷,mamicode.com
首页 > 编程语言 > 详细

python:装饰器

时间:2019-04-14 16:31:47      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:war   %s   添加   foo   封装   eve   div   一个   定义   

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:装饰器

标签:war   %s   添加   foo   封装   eve   div   一个   定义   

原文地址:https://www.cnblogs.com/a-little-v/p/10705298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!