问题归结为timeit._template_func不返回函数的返回值:
def _template_func(setup, func):
"""Create a timer function. Used if the "statement" is a callable."""
def inner(_it, _timer, _func=func):
setup()
_t0 = _timer()
for _i in _it:
_func()
_t1 = _timer()
return _t1 - _t0
return inner
我们可以timeit
通过一些猴子修补来屈服于我们的意愿:
import timeit
import time
def _template_func(setup, func):
"""Create a timer function. Used if the "statement" is a callable."""
def inner(_it, _timer, _func=func):
setup()
_t0 = _timer()
for _i in _it:
retval = _func()
_t1 = _timer()
return _t1 - _t0, retval
return inner
timeit._template_func = _template_func
def foo():
time.sleep(1)
return 42
t = timeit.Timer(foo)
print(t.timeit(number=1))
退货
(1.0010340213775635, 42)
请注意,上面的Monkey-patch仅影响通过 callable@H_301_24@ 传递timeit
时的行为。如果传递字符串语句,则必须(类似地)对字符串进行猴子修补。 __timeit.Timer``timeit.template