1. 手写一个装饰器

import time


def timer(func):
    """
    用于计时的装饰器函数

    :param func: 被装饰函数
    :return: 闭包函数,封装了自定义行为与被装饰函数的调用
    """
    def wrapper(*args, **kwargs):
        """
        闭包函数
        :param args: 被装饰函数的位置参数
        :param kwargs: 被装饰函数的关键字参数
        :return: int,被装饰函数的计算结果
        """
        t1 = time.time()
        res = func(*args, **kwargs)
        t2 = time.time()
        cost = t2 - t1
        print(f"function cost {cost} second")
        return res
    return wrapper


@timer
def run_test():
    print("123")


run_test()