装饰器

Posted 浅色夏沫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器相关的知识,希望对你有一定的参考价值。

1、

def log(func):   # 把函数传进来
  def wrapper(*args, **kvargs):    # *args,  无名字参数 。**kvargs  有名字参数
    print ‘before calling‘, func.__name__
    print ‘args‘, args, ‘kvargs‘, kvargs
    func(*args, **kvargs)
    print ‘end coding‘, func.__name__
  return wrapper

@log   # 相当于log(hello((name, age))
def hello(name, age):
  print ‘hello‘,name, age


if __name__ == ‘__main__‘:
  hello(‘nowcode‘, 2)

结果:

before calling hello
args (‘nowcode‘, 2) kvargs {}
hello nowcode 2
end coding hello

 

若改为

if __name__ == ‘__main__‘:
  hello(name = ‘nowcode‘, age = 2)

结果为:

before calling hello
args () kvargs {‘age‘: 2, ‘name‘: ‘nowcode‘}
hello nowcode 2
end coding hello

 

2、带有参数的装饰器

def log(level,*args, **kvargs):   #处理参数
  def inner(func):  # 把函数传进来
    def wrapper(*args, **kvargs):
      print level,‘before calling‘, func.__name__
      print level,‘args‘, args, ‘kvargs‘, kvargs
      func(*args, **kvargs)
      print ‘end coding‘, func.__name__
    return wrapper
  return inner

@log(level=‘INFO‘)
def hello(name, age):
  print ‘hello‘,name, age


if __name__ == ‘__main__‘:
  hello(name = ‘nowcode‘, age = 2)

输出为:

INFO before calling hello
INFO args () kvargs {‘age‘: 2, ‘name‘: ‘nowcode‘}
hello nowcode 2
end coding hello

 

以上是关于装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python 装饰器:装饰器实例类装饰器(装饰函数)

装饰器、装饰器类与类装饰器(三)

Python进阶装饰器(Decorator)

python 装饰器:装饰器实例内置装饰器

python 装饰器:装饰器实例内置装饰器

TS之装饰器