Python中如何使用timeit模块检查某一条语句的执行时间?

比如:

list1 = [ 'aaa', 'bbb', 'ccc, 'ddd',  'eee' ]
if x in list1:
    pass

想要监测系统在执行过程中,上面这条 if 语句执行消耗了多少时间,用 timeit 怎么查看?


Python中如何使用timeit模块检查某一条语句的执行时间?
11 回复

使用 time 模块就好了


timeit模块测单条语句的执行时间,最直接的方法是用timeit.timeit()函数。下面给个具体例子:

import timeit

# 要测试的语句,这里用字符串形式给出
stmt = "[x**2 for x in range(1000)]"

# 执行1000次,取总时间
execution_time = timeit.timeit(stmt, number=1000)

print(f"执行1000次总耗时: {execution_time:.6f} 秒")
print(f"平均每次耗时: {execution_time/1000:.6f} 秒")

如果你要在测试代码里用变量,可以加上setup参数:

import timeit

setup_code = "n = 1000"
stmt = "[x**2 for x in range(n)]"

execution_time = timeit.timeit(stmt, setup=setup_code, number=500)
print(f"执行500次耗时: {execution_time:.6f} 秒")

还有个更简单的办法,直接在命令行里跑:

python -m timeit "[x**2 for x in range(1000)]"

总结建议:用timeit比手动算时间更准。

开头一时间
结束一时间
然后相减(?)

第一反应也是连个 time 相减

line_profile

ipython


%timeit 最简单了

timeit.timeit(“if x in list1: pass”, “x=‘aaa’; list1=[‘aaa’, ‘bbb’, ‘ccc’, ‘ddd’, ‘eee’]”)

官方文档:timeit.timeit(stmt=‘pass’, setup=‘pass’, timer=<default timer>, number=1000000)

你如果要看一次
timeit.timeit(“if x in list1: pass”, “x=‘aaa’; list1=[‘aaa’, ‘bbb’, ‘ccc’, ‘ddd’, ‘eee’]”, number=1)
不过一般不这样干吧。。。

In [6]: %paste
import timeit

setup = "list1 = [ ‘aaa’, ‘bbb’, ‘ccc’, ‘ddd’, ‘eee’ ]“
stmt = “if ‘x’ in list1: pass"
t = timeit.Timer(stmt=stmt, setup=setup)

n = 1
print(”{0:.3f}”.format(t.timeit(number=n)/n))

n = 10
print(t.timeit(number=n)/n)

n = 10000
print(t.timeit(number=n)/n)

n = 1000000
print(t.timeit(number=n)/n)

## – End pasted text –
0.000
1.3518072108809065e-06
8.570457728040992e-07
1.0187274455574879e-06

如果用 ipython 的话,可以开启自动监测运行时间的功能

回到顶部