在Python中使用示例进行Timeit?
Python提供了许多方法来测量一段python代码的执行时间。一种方法是使用python内置时间模块并节省程序执行前后的时间?
Pythontimeit
当某些程序正在运行时,许多进程也会在后台运行,以使该代码可执行。时间模块不计算后台进程的执行时间,但是,如果需要精确的时间性能测量,可以使用timeit模块。
timeit模块将代码运行大约一百万次(默认值),并考虑了运行该代码所需的最短时间。
使用timeit获取Python执行时间
我们可以通过多种方式使用timeit模块。最简单的方法之一是直接在pythonCLI上使用。
示例
我们将首先从timeit模块开始使用pythonCLI。使用CLI时,我们会注意到模块本身决定了对同一段代码执行的重复次数。
例子1
C:\Users\rajesh>python -m timeit "'-'.join(str(n) for n in range(200))" 1000 loops, best of 3: 290 usec per loop C:\Users\rajesh>python -m timeit "'-'.join(str(n) for n in range(200))" 1000 loops, best of 3: 292 usec per loop C:\Users\rajesh>python -m timeit "'-'.join(str(n) for n in range(200))" 1000 loops, best of 3: 294 usec per loop
例子2
接下来,我们通过另一个简单的示例介绍timeit,但是首先我们必须使用“importtimeit”语句导入timeit模块。如果我们不使用上面的命令行语法,这是必需的。
#Import timeit module
import timeit
# The instructions being timed.
print('x' * 5)
print('x' + 'x' + 'x' + 'x' + 'x')
# Call timeit on the statements and print the time returned.
# ... Specify optional number of iterations.
print(timeit.timeit("y = 'x' * 3", number=10000000))
print(timeit.timeit("xy = 'x' + 'x' + 'x' + 'x' + 'x'", number = 10000000))在上面,我们将带引号的字符串中的语句传递给timeit.timeit方法,然后通过指定数字参数来增加迭代次数。
输出结果
第一次运行上述程序时,生成的输出为:
xxxxx xxxxx 0.9041136896626635 0.7712796073957123
第二次运行以上程序,生成输出:
xxxxx xxxxx 0.7317015874427751 0.7312688195585995
第三次运行以上程序,生成输出:
xxxxx xxxxx 0.7240862411172824 0.7255863890794246
我们多次执行了上述程序(3次),发现执行时间有所减少。一个而不是手动执行的操作,让我们通过程序进行重复:
#Import timeit module
import timeit
# Call timeit on the statements and print the time returned.
# ... Specify optional number of iterations.
print(timeit.repeat("y = 'x' * 3", number=10000000, repeat = 5))
print()
print(timeit.repeat("xy= 'x' + 'x' + 'x' + 'x' + 'x'", number = 10000000, repeat = 5))输出结果
[0.7303736343436382, 0.7213687552991258, 0.7362311105941466, 0.7293136666273243, 0.7278277732068212] [0.7388334197158559, 0.7378481457977326, 0.9486733868277772, 0.735295442480929, 0.7398226849056382]
使用timeit模块运行多个语句:
我们可以在timeit模块中使用多个语句。我们使用分号分隔每个语句。虽然这不是编写代码的最佳方法,但有助于指定更长的代码片段。
#Import timeit module
import timeit
# Use semicolon for multiple statements.
print(timeit.repeat("x = 2; x *= 2", number=100000000))
print(timeit.repeat("x = 1; x *= 4", number=100000000))输出结果
[24.859605879029118, 23.58795536845994, 23.95826726353284] [22.70639977603264, 21.380195994245724, 20.71523588130414]
使用方法,在Timeit模块中进行设置:
通过指定设置参数,我们可以在timeit中使用自定义方法。在此参数中,我们指定了一个导入语句,该语句指示我们调用的方法。
#Import timeit module
import timeit
def func1():
return 1
def func2():
return sum([-1, 0, 1, 1])
# Test methods.
print(func1())
print(func2())
# Pass setup argument to call methods.
print(timeit.repeat("func1()", setup="from __main__ import func1"))
print(timeit.repeat("func2()", setup="from __main__ import func2"))在上面的程序中,我们针对func2()方法对func1()方法进行了基准测试。
输出结果
1 1 [0.44798489246658874, 0.4411512652046069, 0.44570416580426686] [1.583622557983199, 1.5712399227517881, 1.5469479030713984]
由于func1()减少了工作量,因此执行速度更快。
概要
上面我们看到了如何使用timeit模块以及CLI和脚本来测量一小段python代码的性能。