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()
    
  • 相关阅读:
    了解 C++ 默默编写并调用的函数
    确保对象在被使用前的初始化
    尽可能使用 const
    尽量多的以 const/enum/inline 替代 #define
    六 GPU 并行优化的几种典型策略
    五 浅谈CPU 并行编程和 GPU 并行编程的区别
    四 GPU 并行编程的存储系统架构
    三 GPU 并行编程的运算架构
    求解线性方程组的三种基本迭代法
    C#基础 特殊集合(栈集合、队列集合、哈希表集合)
  • 原文地址:https://www.cnblogs.com/raygor/p/13288978.html
Copyright © 2011-2022 走看看