python 修饰器

来源:互联网 发布:php程序员是什么意思 编辑:程序博客网 时间:2024/05/22 12:31

1. 装饰器实质上就是一个函数, 该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象。

装饰器被用于有切面需求的场景,较为经典的有插入日志,性能测试,事务处理等。 通过修饰器,可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用,装饰器的作用就是为已经存在的对象添加额外的功能。

装饰器在python 使用如此方法归因于python 的函数能像普通的对象一样能作为参数传递给其他函数,可以赋值给其他变量, 可以作为返回值 ,也可被定义在另外一个函数内。


装饰器举例:  

def use_logging(func):

      def wrapper(*args, **kwargs):

           logging.warn("%s is running"%func.__name__)

           return func(*args)

     return wrapper

@use_logging

def foo():

    print("i am foo")


@use_logging

def bar():

   print(" i am a bar")


bar()


带参数的装饰器——装饰器可以是带参数的装饰器。

def user_logging(level):

def decorator(func):

def wrapper(*args, **kwargs):

if level == "warn":

logging.warn("%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


类的装饰器

from functools import wraps      wraps 本身是一个装饰器,它能把原函数的元信息拷贝到装饰器函数中,是的装饰器函数也和原函数一样的元信息了。