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
今日推荐
周排行