装饰器的应用

import time


# 装饰器==高阶函数+嵌套函数
# kill函数包含kerr函数,这个就是嵌套函数;kerr函数返回的是kerr函数的内存地址,这个就是高阶函数
def kill(func):  # 用来装饰test1函数的
    def kerr(*args, **kwargs):  # 可以接受多个参数
        start_time = time.time()  # 开始时间
        func(*args, **kwargs)  # 被装饰函数
        end_time = time.time()  # 结束时间
        print("this is %s ,timing is %s" % (func, (end_time - start_time)))  # 可以把这行理解是为test1函数新增加的功能

    return kerr  # 返回kerr函数的内存地址


@kill
# 等于test1 =kill(test1),先运行kill函数,得到一个kerr函数的内存地址,因为装饰的是test1,所以把值赋给了test1,这个时候其实加上“()”就可以运行kerr函数,kerr函数里面又有被装饰的函数,所以调用kerr也调用了test1函数
def test1(name, name1):  # 被装饰函数
    print(test1)
    time.sleep(1)
    print(" in the test1 。。。。,name is %s" % name,name1)


# test1 = kill(test1)
test1("333", "111")  # 调用的名字虽然和被装饰函数一样,但是实际调用的kerr函数( kill(test1) ),因为现在test1指向的是kerr的内存地址

猜你喜欢

转载自blog.csdn.net/xy_best_/article/details/81744855