zoukankan      html  css  js  c++  java
  • python 装饰器(二): 加参数

    接上篇python 闭包&装饰器(一)

    一、功能函数加参数:实现一个可以接收任意数据的加法器

    源代码如下:

    def show_time(f):
    
        def inner(*x, **y):     # 形参
            start = time.time()
            f(*x, **y)     # 相当于add()
            end = time.time()
            print('spend %s' % (end - start))
    
        return inner
    
    
    @show_time  # @show_time 等于 add = show_time(add)
    def add(*a, **b):   # 实参  可以接收任意参数
        sums = 0
        for i in a:
            sums += i
        print(sums)
        time.sleep(1)
    
    add(1, 2, 3, 4, 5)    # 15

    二、装饰器函数加参数:根据需求打印日志

    源代码如下:

    def logger(flag=''):      # flag 默认为空,这一层函数的作用是应用标志位
        def show_time(f):
            def inner(*x, **y):
                start = time.time()
                f(*x, **y)           # 相当于add()
                end = time.time()
                print('spend %s' % (end - start))
                if flag == 'true':
                    print('打印日志')
    
            return inner
        return show_time
    
    
    @logger('true')     # @show_time
    def add(*a, **b):    # 不管有名参数和无名参数都可以接收到
        sums = 0
        for i in a:
            sums += i
        print(sums)
        time.sleep(1)
    
    add(1, 2, 3, 4, 5)
    
    
    @logger('true')
    def bar():
        print('bar.......')
        time.sleep(3)    # 停留3秒
    
    bar()

    注意:@logger('true') 的执行机制是:先执行 logger('true') 函数,然后返回 show_time 函数的内存地址, 所以 @logger('true') 就相当于 @show_time,两者的区别就是 @logger('true') 要了一个变量flag, 之后的装饰器函数里面就可以使用falg这个标志位了

  • 相关阅读:
    web服务器的设置
    java数字图像处理常用算法(转)
    Delphi 7.0常用函数速查手册
    直方图均衡子函数
    Delphi6/7 中XML 文档的应用
    区域增长算法
    Java中的异常栈轨迹和异常链
    Arrays类和Collections的运用
    Java中内部类对象的创建以及hook机制
    Java中的容器
  • 原文地址:https://www.cnblogs.com/ss-long/p/10398925.html
Copyright © 2011-2022 走看看