Python timeit模块原理及使用方法
简介
timeit
是Python中用于衡量代码执行时间的标准库。它允许我们在执行代码的时候对其进行计时,并返回运行时间信息。
使用方法
在代码中使用timeit
一般需要以下三步:
-
导入timeit模块
import timeit
-
创建
timeit.Timer
对象
timer = timeit.Timer(stmt='pass', setup='pass')
-
stmt
参数代表需要计时的代码片段,这段代码会被执行多次; setup
参数是在stmt
前需要执行的额外代码。
注意:stmt
和setup
参数应该是字符串类型,且默认值为'pass'
,故在使用时通常不需要传入。
-
调用
timeit.Timer.timeit()
方法计时
seconds = timer.timeit(number=100000)
-
number
参数表示需要执行stmt
的次数。
通过这三步,我们就可以获得代码执行的时间。
示例1
统计list
与set
的计算时间。
import timeit
# 列表推导式
list_test = '''
lst = [i for i in range(1000)]
lst_2 = [i for i in range(1000) if i % 2 == 0]
'''
# 集合推导式
set_test = '''
st = {i for i in range(1000)}
st_2 = {i for i in range(1000) if i % 2 == 0}
'''
print('List comprehension:', timeit.timeit(stmt=list_test, number=100000))
print('Set comprehension:', timeit.timeit(stmt=set_test, number=100000))
输出结果:
List comprehension: 3.234682413
Set comprehension: 2.994178521
从结果可以看出,set
常用操作的速度大于list
。
示例2
比较冒泡排序和快速排序的执行效率。
import random
import timeit
# 快速排序
def quicksort(lst):
if len(lst) <= 1:
return lst
else:
p = lst.pop()
small, large = [], []
for i in lst:
if i <= p:
small.append(i)
else:
large.append(i)
return quicksort(small) + [p] + quicksort(large)
# 生成随机数列表
lst = [random.randint(0, 1000) for _ in range(1000)]
# 冒泡排序和快速排序代码片段
bubble_sort = '''
lst_1 = {}
for i in range(len(lst_1)):
for j in range(i+1, len(lst_1)):
if lst_1[i] > lst_1[j]:
lst_1[i], lst_1[j] = lst_1[j], lst_1[i]
'''.format(lst)
quick_sort = '''
lst_2 = {}
lst_2 = quicksort(lst_2)
'''.format(lst)
# 输出冒泡排序和快速排序的执行时间
bubble_sort_time = timeit.timeit(stmt=bubble_sort, number=100000)
quick_sort_time = timeit.timeit(stmt=quick_sort, number=100000)
print('Bubble sort time:{:.6f}s'.format(bubble_sort_time))
print('Quick sort time:{:.6f}s'.format(quick_sort_time))
输出结果:
Bubble sort time:16.124477s
Quick sort time:0.206920s
从以上结果可以看出,quick-sort
明显快于bubble-sort
。
结语
timeit
模块是Python中衡量代码执行时间的标准库,可以让我们对代码执行效率进行比较。但是要注意,不同的测试环境和测试条件,也会对测试结果产生影响。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python timeit模块原理及使用方法 - Python技术站