• 030_Python3 decorators 模块


    import time
    
    # 都不带参数
    def dinner(func):
        def wrapper():
            start_time = time.time()
    
            print('饭前洗了一次手!')
            func()
            print('饭后擦了一下嘴!')
            end_time = time.time()
    
            print('吃饭花了我	{}秒'.format(end_time - start_time))
    
        return wrapper
    
    
    @dinner
    def eat():
        print('Eat...')
        time.sleep(2)
    
    
    @dinner
    def drink():
        print('Drink...')
        time.sleep(3)
    
    
    eat()
    drink()
    
    '''
    饭前洗了一次手!
    Eat...
    饭后擦了一下嘴!
    吃饭花了我    2.000243663787842秒
    
    饭前洗了一次手!
    Drink...
    饭后擦了一下嘴!
    吃饭花了我    3.000170946121216秒
    '''
    import time
    
    
    # 被装饰的函数带参数
    def dinner(func):
        def wrapper(a, b):
            start_time = time.time()
    
            print('饭前洗了一次手!')
            func(a, b)
            print('饭后擦了一下嘴!')
            end_time = time.time()
    
            print('吃饭花了我	{}秒'.format(end_time - start_time))
    
        return wrapper
    
    
    @dinner
    def eat(a, b):
        print('I have {} and {} at dinner'.format(a, b))
        time.sleep(2)
    
    
    @dinner
    def drink(a, b):
        print('I drink {} and {} at dinner'.format(a, b))
        time.sleep(3)
    
    
    eat('potato', 'rice')
    drink('beer', 'tea')
    
    '''
    饭前洗了一次手!
    I have potato and rich at dinner
    饭后擦了一下嘴!
    吃饭花了我    2.004790782928467秒
    
    饭前洗了一次手!
    I drink beer and tea at dinner
    饭后擦了一下嘴!
    吃饭花了我    3.0000154972076416秒
    '''
    import time
    
    '''
    带参数的装饰器(装饰函数),
    实际是对原有装饰器的一个函数的封装,并返回一个装饰器(一个含有参数的闭包函数),
    当使用@time_logger(3)调用的时候,Python能发现这一层封装,并将参数传递到装饰器的环境去
    '''
    
    
    # 装饰器 和 被装饰函数 都带参数
    def eat_and_drink(flag=''):
        def dinner(func):
            def wrapper(a, b):
                start_time = time.time()
    
                print('饭前洗了一次手!')
                func(a, b)
                print('饭后擦了一下嘴!')
                end_time = time.time()
    
                print('吃饭花了我	{}秒'.format(end_time - start_time))
    
                if flag:
                    print(flag)
    
            return wrapper
    
        return dinner
    
    
    @eat_and_drink('吃完饭我吃了一个苹果.')
    def eat(a, b):
        print('I have {} and {} at dinner'.format(a, b))
        time.sleep(2)
    
    
    @eat_and_drink('喝完汤我小憩了一会.')
    def drink(a, b):
        print('I drink {} and {} at dinner'.format(a, b))
        time.sleep(3)
    
    
    eat('potato', 'rice')
    drink('beer', 'tea')
    
    '''
    饭前洗了一次手!
    I have potato and rice at dinner
    饭后擦了一下嘴!
    吃饭花了我    2.009742259979248秒
    吃完饭我吃了一个苹果.
    
    饭前洗了一次手!
    I drink beer and tea at dinner
    饭后擦了一下嘴!
    吃饭花了我    3.00014066696167秒
    喝完汤我小憩了一会.
    '''
  • 相关阅读:
    Django实战(4):scaffold生成物分析
    Django实战(3):Django也可以有scaffold
    创建第一个模型类
    1. 实战系列的开发目标
    Django第一步
    URLconf+MTV:Django眼中的MVC
    mp4文件格式解析
    傅里叶分析之掐死教程(完整版)更新于2014.06.06
    关于Spinlock机制的一点思考
    spinlock变量没有初始化
  • 原文地址:https://www.cnblogs.com/luwei0915/p/14629261.html
Copyright © 2020-2023  润新知