Python timeit 模块导致死循环
Python timeit module causes an infinite loop
考虑这个 Python3 代码:
def classic_fibonacci(limit: int) -> List[int]:
nums = []
curr, nxt = 0, 1
while curr < limit:
curr, nxt = nxt, nxt + curr
nums.append(curr)
return nums
def classic_fib_profiling():
for n in classic_fibonacci(limit=1000):
print(n, end=', ')
if __name__ == '__main__':
import timeit
timeit.timeit("classic_fib_profiling()", setup="from __main__ import classic_fib_profiling")
调用 classic_fib_profiling()
returns,正如预期的那样,一个单一的斐波那契数列,仅限于 limit
参数。
另一方面,使用 timeit.timeit
调用它会导致解释器进入无限循环,永不停止。我无法通过调试或搜索文档(和 SO)找到解决方案。任何帮助将不胜感激。
它不会进入无限循环。它将 运行 相同的功能 number
次(默认值:number=1000000
)。只需等待它完成,或提供循环应该 运行 的次数。检查 timeit.timeit
函数的参数。
Help on function timeit in module timeit:
timeit(stmt='pass', setup='pass', timer=, number=1000000, globals=None)
Convenience function to create Timer object and call timeit method.
更改行,
>>> timeit.timeit("classic_fib_profiling()", setup="from __main__ import classic_fib_profiling")
到
>>> timeit.timeit("classic_fib_profiling()", setup="from __main__ import classic_fib_profiling", number=1)
并观察 :)
考虑这个 Python3 代码:
def classic_fibonacci(limit: int) -> List[int]:
nums = []
curr, nxt = 0, 1
while curr < limit:
curr, nxt = nxt, nxt + curr
nums.append(curr)
return nums
def classic_fib_profiling():
for n in classic_fibonacci(limit=1000):
print(n, end=', ')
if __name__ == '__main__':
import timeit
timeit.timeit("classic_fib_profiling()", setup="from __main__ import classic_fib_profiling")
调用 classic_fib_profiling()
returns,正如预期的那样,一个单一的斐波那契数列,仅限于 limit
参数。
另一方面,使用 timeit.timeit
调用它会导致解释器进入无限循环,永不停止。我无法通过调试或搜索文档(和 SO)找到解决方案。任何帮助将不胜感激。
它不会进入无限循环。它将 运行 相同的功能 number
次(默认值:number=1000000
)。只需等待它完成,或提供循环应该 运行 的次数。检查 timeit.timeit
函数的参数。
Help on function timeit in module timeit:
timeit(stmt='pass', setup='pass', timer=, number=1000000, globals=None) Convenience function to create Timer object and call timeit method.
更改行,
>>> timeit.timeit("classic_fib_profiling()", setup="from __main__ import classic_fib_profiling")
到
>>> timeit.timeit("classic_fib_profiling()", setup="from __main__ import classic_fib_profiling", number=1)
并观察 :)