装饰器进阶

_name_:查看字符串形式的函数名

_doc_:查看函数解释文档

完美装饰器:可以使用__name__及__doc__等方法。

from functools import wraps

def wraps1(func)

  @wraps

  def inner1()

    'before func'

    ret=func(*args,**kwargs)

    'after func'

    return ret

  return inner

@wraps1

def  func()

  print('hello,world')

func()

带参数的装饰器(三层嵌套):

 

pass

多个装饰器装饰一个函数:执行结果类似套娃

def wraps1(f):
def inner1(*args,**kwargs):
print('front wraps1')
ret=f(*args,**kwargs)
print('after wraps1')
return ret
return inner1
def wraps2(f):
def inner2(*args,**kwargs):
print('front wraps2')
ret=f(*args,**kwargs)
print('after wraps2')
return ret
return inner2
@wraps2
@wraps1
def func():
print('hello')
func()

执行结果:

front wraps2
front wraps1
hello
after wraps1
after wraps2

posted @ 2019-01-15 19:56  【小桥流水人家】  阅读(95)  评论(0编辑  收藏  举报