1. python装饰器html
https://foofish.net/python-decorator.htmlpython
归纳来讲,装饰器的做用就是为已经存在的对象(类或函数)添加额外的功能。编程
能够使用以下的方式:(简单的装饰器)app
def use_logging(func): def wrapper(): logging.warn("%s is running" % func.__name__) return func() # 把 foo 当作参数传递进来时,执行func()就至关于执行foo() return wrapper def foo(): print('i am foo') foo = use_logging(foo) # 由于装饰器 use_logging(foo) 返回的时函数对象 wrapper,这条语句至关于 foo = wrapper foo()
解释: use_logging 就是一个装饰器,它一个普通的函数,它把执行真正业务逻辑的函数 func 包裹在其中,看起来像 foo 被 use_logging 装饰了同样,use_logging 返回的也是一个函数,这个函数的名字叫 wrapper。在这个例子中,函数进入和退出时 ,被称为一个横切面,这种编程方式被称为面向切面的编程。函数
使用python装饰器的语法糖(@ 符号就是装饰器的语法糖,它放在函数开始定义的地方)能够省略最后一步“赋值”的操做:spa
def use_logging(func): def wrapper(): logging.warn("%s is running" % func.__name__) return func() return wrapper @use_logging def foo(): print("i am foo") foo()
注:装饰器在 Python 使用如此方便都要归因于 Python 的函数能像普通的对象同样能做为参数传递给其余函数,能够被赋值给其余变量,能够做为返回值,能够被定义在另一个函数内。.net
还有带参数的装饰器、类装饰器等等,详见上面推荐的博客。code