zoukankan      html  css  js  c++  java
  • 14 练习题:装饰器

    # 1.看代码写结果:
    # def wrapper(f):
    #     def inner(*args,**kwargs):
    #         print(111)
    #         ret = f(*args,**kwargs)
    #         print(222)
    #         return ret
    #     return inner
    #
    # @wrapper
    # def func():
    #     print(333)
    #
    # print(444)
    # func()
    # print(555)
    
    # result: 444 111 333 222 555
    
    
    
    # 2.编写装饰器,在每次执行被装饰函数之前打印一句’每次执行被装饰函数之前都得先经过这里,这里根据需求添加代码’。
    def decorator(func):
        def inner(*args, **kwargs):
            print('每次执行被装饰函数之前都得先经过这里,这里根据需求添加代码')
            ret = func(*args, **kwargs)
            return ret
        return inner
    
    
    
    # 3.为函数写一个装饰器,把函数的返回值 +100 然后再返回。
    # @wrapper
    # def func():
    #     return 7
    #
    # result = func()
    # print(result)
    
    def wrapper(func):
        def inner():
            return func() + 100
        return inner
    
    
    
    # 4.请实现一个装饰器,通过一次调用是函数重复执行5次。
    def wrapper(func):
        def inner(*args, **kwargs):
            ret = []  # 将五次的返回值装入一个列表中返回
            for i in range(5):
                ret.append(func(*args, **kwargs))
            return ret
        return inner
    
    
    
    # 5.请实现一个装饰器,每次调用函数时,将函数名以及调用此函数的时间节点写入文件中。
    # 可用代码:
    # import time
    # struct_time = time.localtime()
    # print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time)) # 当前时间节点
    # 函数名通过: 函数名.__name__获取。
    import time
    def wrapper(func):
        def inner(*args, **kwargs):
            with open(r'03 作业calling_history', encoding='utf-8', mode='a') as file_handler:
                file_handler.write(func.__name__ + ' ' + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) + '
    ')
                ret = func(*args, **kwargs)
            return ret
        return inner
    
    @wrapper
    def func():
        print('hello world.')
    
    func()
    
  • 相关阅读:
    May LeetCoding Challenge3 之 HashMap的使用
    May LeetCoding Challenge2 之 HashSet的使用
    May LeetCoding Challenge1 之 标准二分查找法
    30-Day Leetcoding Challenge Day21
    30-Day Leetcoding Challenge Day19
    30-Day Leetcoding Challenge Day18
    ALV 单元格编辑回车响应
    ALV模版1
    web dynpro 开发配置
    convert fm
  • 原文地址:https://www.cnblogs.com/raygor/p/13288978.html
Copyright © 2011-2022 走看看