python - Python timeit 模块导致无限循环
问题描述
考虑这个 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)找到解决方案。任何帮助,将不胜感激。
解决方案
它不会进入无限循环。它将运行相同的函数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)
并观察:)
推荐阅读
- amazon-dynamodb - 没有 DynamoDB 流的 AWS DynamoDB 到 Kinesis
- python-3.x - PySide2 QAction 事件被阻止直到窗口关闭
- sql - 需要按名称分组
- version-control - 如何在 ClearCase 中列出用于在分支(例如:0、1、2)上创建版本的视图名称
- javascript - 使用 webpack 导入 React 组件时构建失败
- c++ - 包含文件中的 Typdef '未在此范围内声明'
- cmake - 如何防止 CMake 外部项目在我制作时更新和重新安装?
- python - 打印时如何从列表末尾剪断空间
- python - Python序列化问题
- r - 使用 R 中的 stringr 包提取输入字符串的特定部分