练习
请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间:
# -*- coding: utf-8 -*-
import time, functools
def metric(fn):
@functools.wraps(fn) #若没有这一行,后边的调用fast._name_和slow._name_都会返回decorator
def decorator(*args,**kw):
print('%s executed in %s ms' % (fn.__name__, 10.24))
r=fn(*args,**kw)
print(r)
return r
print('in metric')
return decorator
# 测试
@metric
def fast(x, y):
time.sleep(0.0012)
return x + y;
@metric
def slow(x, y, z):
time.sleep(0.1234)
return x * y * z;
f = fast(11, 22)
print(fast.__name__)
s = slow(11, 22, 33)
print(slow.__name__)
if f != 33:
print('测试失败!')
elif s != 7986:
print('测试失败!')
else:
print('测试成功!')

本文介绍了一个Python装饰器的设计,该装饰器可以应用于任何函数,用于打印函数的执行时间。通过使用time模块和functools.wraps,装饰器能够保持原始函数的元信息并准确测量执行时间。
1120

被折叠的 条评论
为什么被折叠?



