Python timeit
最后修改于 2025 年 2 月 16 日
在本文中,我们将展示如何使用 Python 的 timeit 模块来测量小代码片段的执行时间。timeit 模块对于性能测试和优化特别有用,因为它通过多次运行代码来提供准确的计时结果。
timeit 模块是 Python 标准库的一部分,因此无需额外安装。
timeit 的基本用法
timeit 模块提供了 timeit 函数,可用于测量语句的执行时间。该函数具有以下参数:
stmt:要计时的语句(默认为pass)。setup:在执行语句之前运行的代码(默认为pass)。timer:一个timeit.Timer对象(通常有一个合理的默认值)。number:执行语句的次数(默认为 1,000,000)。
示例:计时简单语句
以下示例演示了如何对简单的算术运算进行计时。
main.py
import timeit # Time the execution of the statement "5 + 5" stm = "5 + 5" print(timeit.timeit(stmt=stm, number=50_000_000))
在此程序中,timeit.timeit 函数用于在 5000 万次迭代中测量语句 5 + 5 的执行时间。
$ python main.py 0.7231783000170253
示例:计时指数运算
以下示例比较了计算指数的两种方法的执行时间:使用 ** 运算符和 pow 函数。
main.py
import timeit # Time the execution of the statement "3 ** 3" stm = "3 ** 3" print(timeit.timeit(stmt=stm, number=50_000_000)) # Time the execution of the statement "pow(3, 3)" stm = "pow(3, 3)" print(timeit.timeit(stmt=stm, number=50_000_000))
在此程序中,timeit.timeit 函数用于在 5000 万次迭代中测量语句 3 ** 3 和 pow(3, 3) 的执行时间。
$ python main.py 0.6393674000282772 3.6729515999904834
比较循环:for vs while
以下示例比较了 for 循环和 while 循环的执行时间。
main.py
import timeit
# Define a function with a for loop
mycode = '''
def fn():
for e in range(10000):
print(e)
'''
# Define a function with a while loop
mycode2 = '''
def fn():
i = 0
while i < 10000:
print(i)
i += 1
'''
# Time the execution of the for loop
print(timeit.timeit(stmt=mycode, number=5_000_000))
# Time the execution of the while loop
print(timeit.timeit(stmt=mycode2, number=5_000_000))
在此程序中,timeit.timeit 函数用于在 500 万次迭代中测量 for 循环和 while 循环的执行时间。
$ python main.py 0.44675440003629774 0.4859266999992542
使用装饰器进行计时
以下示例演示了如何使用 timeit 模块创建装饰器来测量函数的执行时间。
main.py
import timeit
# Define a decorator for timing functions
def time_it(fn):
def wrapper(*args, **kwargs):
t0 = timeit.default_timer()
fn(*args, **kwargs)
t1 = timeit.default_timer()
print("{0:.10f} seconds".format(t1 - t0))
return wrapper
# Apply the decorator to functions
@time_it
def fstring_fn(vals):
print("fstring_fn:", f"{vals[0]} {vals[1]} {vals[2]} {vals[3]} {vals[4]}")
@time_it
def format_fn(vals):
print("format_fn:", "{0} {1} {2} {3} {4}".format(*vals))
@time_it
def oldschool_fn(vals):
print("oldschool_fn:", "%s %s %s %s %s" % vals)
# Test data
data = ('sky', 'pen', 23.0, -11, True)
# Call the decorated functions
fstring_fn(data)
print('---------------')
format_fn(data)
print('---------------')
oldschool_fn(data)
在此程序中,time_it 装饰器用于测量三个函数 fstring_fn、format_fn 和 oldschool_fn 的执行时间。
$ python main.py fstring_fn: sky pen 23.0 -11 True 0.0002156000 seconds --------------- format_fn: sky pen 23.0 -11 True 0.0002937000 seconds --------------- oldschool_fn: sky pen 23.0 -11 True 0.0003093000 seconds
来源
在本文中,我们展示了如何使用 Python 的 timeit 模块来测量小代码片段的执行时间。timeit 模块是性能测试和优化的强大工具。
作者
列出所有 Python 教程。