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

  • 相关阅读:
    swoole入门abc
    PHP实现定时任务(非linux-shell方式,与操作系统无关)
    PHP经典算法题
    lumen使用CORS解决跨域问题
    轻松搞定 JS 的this、call和apply
    Nginx与PHP工作原理
    PHP的cURL扩展库使用详解
    PHP 中的 cURL 爬虫实战基础
    jvm误区--动态对象年龄判定
    从源码分析如何优雅的使用 Kafka 生产者
  • 原文地址:https://www.cnblogs.com/toudoubao/p/6705850.html
Copyright © 2011-2022 走看看