标准库:timeit --- 测量小代码片段的执行时间

 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) (因电脑性能可变)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值