码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2017-04-13 21:09:40      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:==   *args   span   level   inf   evel   var   nbsp   rgs   

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

 

装饰器

标签:==   *args   span   level   inf   evel   var   nbsp   rgs   

原文地址:http://www.cnblogs.com/toudoubao/p/6705850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!