Python timeit 模块导致无限循环

Posted

技术标签:

【中文标题】Python timeit 模块导致无限循环【英文标题】:Python timeit module causes an infinite loop 【发布时间】:2019-09-12 05:57:39 【问题描述】:

考虑一下这个 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() 会按预期返回单个斐波那契数列,仅限于limit 参数。

另一方面,使用timeit.timeit 调用它会导致解释器进入无限循环,永不停止。我无法通过调试或搜索文档(和 SO)找到解决方案。任何帮助将不胜感激。

【问题讨论】:

好吧,只是我跛脚:(我应该更仔细地阅读文档! 【参考方案1】:

它不会进入无限循环。它将运行相同的函数number 次(默认值:number=1000000)。只需等待它完成,或提供循环应该运行的次数。检查timeit.timeit 函数的参数。

模块timeit中的timeit函数帮助:

timeit(stmt='pass', setup='pass', timer=, number=1000000, globals=None) 创建Timer对象和调用timeit方法的便捷函数。

换行,

>>> 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)

并观察:)

【讨论】:

以上是关于Python timeit 模块导致无限循环的主要内容,如果未能解决你的问题,请参考以下文章

Python:在克隆列表中使用 lower() 会导致无限循环? [复制]

无限循环计算阶乘问题

为啥这会导致无限循环

骑士之旅 - 导致无限循环,我不知道为啥

无限循环的线程是不是会导致 CPU 过多

为啥这段代码不会导致无限循环?