Python的timeit模块会导致无限循环

3

考虑以下 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)找到解决方案。欢迎任何帮助。


好的,那只是我太蠢了 :( 我应该更仔细地阅读文档! - Artur
1个回答

4

它不会进入无限循环。它将运行同一个函数 number 次(默认值: number=1000000)。请等待执行完成,或者根据需要提供循环次数。请查看 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)

请观察 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接