利用装饰器完成对被装饰函数的性能测试,具体指该函数的总的运行时间是多少?
import time
from functools import wraps
def performanceTest(func):
"""计算被装饰的函数运行时间的装饰器"""
# @wraps(func),用来保留func函数原有的函数名和帮助文档
@wraps(func)
def wrapper(*args, **kwargs):
"""闭包函数"""
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print("%s函数运行的时间为%.2f秒" % (func.__name__, end_time - start_time))
return result
return wrapper
def is_prime(num):
"""判断传入参数是否为质数"""
for div_num in range(2, num):
if num % div_num == 0:
return False
else:
return True
# 举例:generate_primes函数为此场景下的被装饰函数
@performanceTest # ===> generate_primes = performanceTest(generate_primes)
def generate_primes():
"""生成所有1-100000范围内的质数"""
# 列表生成式
return [num for num in range(1, 100001) if is_prime(num)]
if __name__ == '__main__':
generate_primes()
执行结果: