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

  • 相关阅读:
    mysql主从之双主配置
    mysql主从之binlog的工作模式
    mysql主从之主机名导致主从机制失败的问题
    python_文件 处理
    python_字典 学习
    python_元组 学习
    python 基础内置函数表及简单介绍
    python 列表学习
    python函数基础学习
    python迭代器、生成器、列表推倒式
  • 原文地址:https://www.cnblogs.com/toudoubao/p/6705850.html
Copyright © 2011-2022 走看看