zhlan--Python中的装饰器

装饰器:不改变原来函数的调用方式和参数,为其增加新功能;

下面这个装饰器,是在不改变 fun() 的调用方式和参数下,为其包装了一层名为 timer 的装饰器,使其拥有 deco() 这个新功能,代码如下:

import time
def timer(func):
def deco():
start_time = time.time() # 开始时间
func()
end_time = time.time() # 结束时间
print('run数的运行时间是%.2f' % (end_time - start_time))
return deco
# deco这个函数其实就是返回了一个函数名而已
# @timer # run = timer(run) 意思是下面的这个函数要调用timer这个装饰器
def run():
print('run...')
time.sleep(1)
run = timer(run) # run = deco 如果用@timer了,就不用写这句了
# 1、调用timer函数的时候,要传入一个方法名
# timer函数在函数内部定义了一个函数叫做deco
# 又在函数deco内部调用了timer里面传入的方法
# run保存的是decodeco是一个函数,调用run就是调用deco
run() # run() = deco()

调用时在使用它的函数前@它

原文地址:https://www.cnblogs.com/zhlan/p/7028029.html