被测试函数:
def common_items(sq1,sq2):
common = (item for item in sq1 if item in sq2) #生成器表达式
return common
def common_items(sq1,sq2):
common = [item for item in sq1 if item in sq2] #列表直接生成所有的数据
return common
我们对上面的两个函数进行测试
测试函数
import random
from time import perf_counter as time_func
from contextlib import contextmanager
from demo import common_items
@contextmanager
def timer():
try:
start = time_func()
yield
except Exception as e:
print(e)
raise
finally:
end = time_func()
print('Time spent=>', 1000.0 * (end - start), 'ms.')
def test(n,func):
a1 = random.sample(range(0, 2 * n), n)
a2 = random.sample(range(0, 2 * n), n)
with timer() as t:
result = func(a1, a2)
print(result)
if __name__ == '__main__':
test(100000,common_items)
生成器表达式测试结果如下:
Time spent=> 0.006198999926709803 ms.
直接生成列表的测试结果如下:
Time spent=> 1688.975733999996 ms.
我们可以用上面的这样的方法去测试函数算法的时间长度。可以根据不同的时间复杂度去设计出最优质的算法。
你可以用 timeit 模块去解决同样的问题