?Lib/timeit.py
此模块提供了一种简单的方法来计算一小段 Python 代码的耗时。
?它有?命令行接口?以及一个?可调用?方法。
Python 接口
三个便利函数和一个
timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)
使用给定语句、?setup?代码和?timer?函数创建一个?Timer?实例,并执行?number?次其?timeit()?方法。可选的?globals?参数指定用于执行代码的命名空间。
import timeit
def test(num, times):
result = num ** times
while result != 0:
result -= 1
# print('test over once')
return
print(timeit.timeit('test(2,10)', setup='from __main__ import test', number=1000))
# output: 0.03185769997071475 (因电脑性能可变)
def f(x):
return x ** 2
def g(x):
return x ** 4
def h(x):
return x ** 8
print(timeit.timeit('[func(42) for func in (f,g,h)]', globals=globals()))
# output: 0.9155400999588892 (因电脑性能可变)
timeit.repeat(stmt='pass', setup='pass', timer=<default timer>, repeat=5, number=1000000, globals=None)
使用给定语句、?setup?代码和?timer?函数创建一个?Timer?实例,并使用给定的?repeat?计数和?number?执行运行其?repeat()?方法。可选的?globals?参数指定用于执行代码的命名空间。
import timeit
import pprint
def test(num, times):
result = num ** times
while result != 0:
result -= 1
# print('test over once')
return
#pprint.pprint(timeit.repeat('__main__.test(2,10)', setup='import __main__', repeat=3, number=1000))
pprint.pprint(timeit.repeat('test(2,10)', setup='from __main__ import test',repeat=3, number=1000))
# output: [0.031496500014327466, 0.030269599985331297, 0.030263799999374896] (因电脑性能可变)
def f(x):
return x ** 2
def g(x):
return x ** 4
def h(x):
return x ** 8
pprint.pprint(timeit.repeat('[func(42) for func in (f,g,h)]', repeat=3,globals=globals()))
# output: [0.8898227000026964, 0.8891328999889083, 0.8846025999519043](因电脑性能可变)
timeit.default_timer()
默认的计时器,总是?time.perf_counter()?。
公共类
class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>, globals=None)
用于小代码片段的计数执行速度的类。
构造函数接受一个将计时的语句、一个用于设置的附加语句和一个定时器函数。两个语句都默认为?'pass' ?;计时器函数与平台有关(请参阅模块文档字符串)。?stmt?和?setup?也可能包含多个以?; ?或换行符分隔的语句,只要它们不包含多行字符串文字即可。该语句默认在 timeit 的命名空间内执行;可以通过将命名空间传递给?globals?来控制此行为。
timeit(number=1000000)
执行?number?次主要语句。这将执行一次 setup 语句,然后返回执行主语句多次所需的时间,以秒为单位测量为浮点数。参数是通过循环的次数,默认为一百万。要使用的主语句、 setup 语句和 timer 函数将传递给构造函数。
autorange(callback=None)
自动决定调用多少次?timeit()?。
repeat(repeat=5, number=1000000)
调用?timeit()?几次。
print_exc(file=None)
帮助程序从计时代码中打印回溯。
import timeit
def test(num, times):
result = num ** times
while result != 0:
result -= 1
# print('test over once')
return
myTimer1 = timeit.Timer('test(2,10)', setup='from __main__ import test')
print(myTimer1.timeit(1000))
# output: 0.030595600022934377 (因电脑性能可变)
print(myTimer1.repeat(3, 1000))
# output: [0.030345899984240532, 0.03075980005087331, 0.030356000002939254] (因电脑性能可变)
print(myTimer1.autorange())
# output: (10000, 0.31549419998191297) (因电脑性能可变)
def f(x):
return x ** 2
def g(x):
return x ** 4
def h(x):
return x ** 8
myTimer2 = timeit.Timer('[func(42) for func in (f,g,h)]', globals=globals())
print(myTimer2.timeit(1000))
# output: 0.0009309999877586961(因电脑性能可变)
print(myTimer2.repeat(3, 1000))
# output: [0.000907599984202534, 0.0009109000093303621, 0.0009160999907180667] (因电脑性能可变)
print(myTimer2.autorange())
# output: (500000, 0.4462444999953732) (因电脑性能可变)
|