python 装饰器

装饰器:

学习Python函数和函数式编程中最后一个可能也是最难懂的概念就是装饰器(decorator).


在这里,Python的装饰器指的是一种让你能改变或者说"装饰"函数行为的机制,它能让函数执行一些和原本设计不同,

或是在原有基础上额外的操作。

装饰器是也可以说是对函数的一个包装,这些额外的任务包括写日志,计时,过滤等。


Python里一个被包裹或装饰的函数(对象)通常会被重新赋值给原来的名字,这样被包裹的函数能和普通

的版本保持兼容---因为使用装饰器就是在现有的功能上再"加盖"额外的功能。



最简单的语法形式是这样的:

@deco
def foo():
    pass

在这个例子里,deco就是一个装饰了foo函数的装饰器函数(decorator function).


它先把foo函数拿过来,加上一些额外功能后再重新赋值给foo.

@deco的语法和下面的代码是等价的(假设这里的foo是一个有效的函数对象)

下面这个简单的例子记录了函数调用的发生:

def log(func):
  def wrappedFunc():
     print "*** %s() called" % func.__name__
     return func()
  return wrappedFunc
@log
def foo():
    print "inside foo()"
foo()

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a7.py
*** foo() called
inside foo()

Process finished with exit code 0

原文地址:https://www.cnblogs.com/hzcya1995/p/13349528.html