zoukankan      html  css  js  c++  java
  • 装饰器

    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

  • 相关阅读:
    git客户端
    Autowired注解的妙用---在Controller里的构造函数里获取需要注入的对象
    面向对象的理解
    改变对update的做法
    时间戳与日期相互转换
    Git随记
    json数据传输有感
    Mybatis的批量CRUD
    并发与线程有感
    dpkg --info
  • 原文地址:https://www.cnblogs.com/toudoubao/p/6705850.html
Copyright © 2011-2022 走看看