问题 Python timeit和程序输出


有没有办法使用timeit函数同时输出函数结果和处理时间?

现在我正在使用

timer = Timer('func()', 'from __main__ import func')
print timer.timeit(1)

但这只是输出时间而不是程序输出,它会在结束时返回一些内容。我希望它输出

FuncOutputGoesHere 13.2897528935

在同一条线上。

理想情况下,我希望能够通过运行N次来获取程序的平均值,然后输出程序结果及其平均时间(总共一个输出)


5768
2018-06-04 16:31


起源

我似乎看到人们推荐timeit和人们推荐time.time()之间有很多偏差。哪个更好? - MyNameIsKhan
timeit 使用 time.time(),除非你在Windows上,它将使用它 time.clock (更准确)。 - Martijn Pieters♦
那么timeit会给我最准确的吗? - MyNameIsKhan
我的回答给了你 相同的代码 什么 timeit 使用。它会同样准确。 - Martijn Pieters♦
更新了我的回答;如果你不止一次运行它 无论如何,为什么不再次运行它来捕获返回值? - Martijn Pieters♦


答案:


两种选择:

  1. 在您的定时代码中加入'print'。丑陋,但嘿。

    timer = Timer('print func()', 'from __main__ import func')
    print timer.timeit(1)
    
  2. 如果你所做的只是运行一次你的功能,那么就省去了 timeit 模块共同使用相同的方法直接代码:

    import sys
    import time
    
    if sys.platform == "win32":
        # On Windows, the best timer is time.clock()
        default_timer = time.clock
    else:
        # On most other platforms the best timer is time.time()
        default_timer = time.time
    
    t0 = default_timer()
    output = func()
    t1 = default_timer()
    print output, t1 - t0
    

如果要多次运行代码并生成输出,为什么不运行一次代码  时间函数?无论如何你已经多次调用它了:

    timer = Timer('func()', 'from __main__ import func')
    print timer.timeit(100),
    print func()

14
2018-06-04 16:42



谢谢,这非常有用 - Dennis Golomazov


timeit模块执行传递的语句。你可以打印函数的结果:

timer = Timer('print func()', 'from __main__ import func')
print timer.timeit(1)

0
2018-06-04 16:43



这将打印一百万次,或者通常执行语句,并将I / O开销计入时间。
@delnan:他运行timer.timeit(1)......按照你的意愿做。 :-P - Martijn Pieters♦
@MartijnPieters我不知道如何多次运行它而不输出多次;另外我认为我需要将结果除以运行时数,因为它似乎是聚合的。运行它几次以获得平均值并输出一次是理想的。 - MyNameIsKhan
是的,它聚合总运行时间。请参阅timeit文档。 - Martijn Pieters♦