zoukankan      html  css  js  c++  java
  • 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秒
    喝完汤我小憩了一会.
    '''
  • 相关阅读:
    hdu-1116(欧拉回路+并查集)
    hdu-1143(简单dp)
    hdu-1141
    JAVA里面获取map的key和value的方法
    MySQL中Date,DateTime,TimeStamp和Time的比较
    idea中修改git提交代码的用户名
    spring配置多个视图解析
    判断Map集合中是否存在某一个key
    win10家庭版升级为win10专业版
    MyBatis模糊查询的三种拼接方式
  • 原文地址:https://www.cnblogs.com/luwei0915/p/14629261.html
Copyright © 2011-2022 走看看