装饰器实现一个函数计时器:
- 题目:比较for循环拼接与系统内置拼接.join的速度
- 问题:如何保留被装饰函数的函数名和帮助信息文档
- 程序内容:
import time
import random
import string
import functools
#问题:如何保留被装饰函数的函数名和帮助信息文档
li = [random.choice(string.ascii_letters) for i in range(100)]
def timeit(fun):
@functools.wraps(fun) #为了保留被装饰函数的函数名和帮助文档信息
def wrapper(*args,**kwargs):
"""这是一个wrapper函数"""
start_time = time.time()
res = fun(*args,**kwargs)
end_time = time.time()
print('运行时间为:%.6f' %(end_time - start_time))
return res
return wrapper
@timeit
def con_add():
"""这是for循环"""
s = ''
for i in li:
s += (i + ',')
print(s)
@timeit
def join_add():
"""这是join方法"""
print(','.join(li))
print(con_add.__name__) #打印被装饰函数名
print(con_add.__doc__) #打印被装饰函数帮助文档信息
con_add() #调用函数
print(join_add.__name__)
print(join_add.__doc__)
join_add()