我希望Python类/函数近似IPython%%timeit



IPython或Jupyter笔记本中的%%timeit有两个我喜欢的功能。

  1. 在有限的时间内运行,自动调整给定批次数的迭代次数。

  2. 输出为平均值+标准差。这比许多跑步中的最短跑步时间要好。

以下是IPython终端的输出示例。第一个来自";慢速版本";对于一个函数,第二个来自更快的版本。

In [21]:  %timeit hh = gg.get_map(form="232", year=2019, source="form")
1.82 s ± 111 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [18]: %timeit jj = fm.get_map(form="232", year=2019, source="form")
324 µs ± 22.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

请注意,当函数速度较慢时,它会返回7 x 1的执行次数,但当它速度较快时,它最多会拨打7 x 1000。

我一直在研究IPython代码,以了解它们是如何做到这一点的,我认为我可以适应python代码块。这是一项艰巨的工作!它把我带入了一个陌生的领域,与AST互动。

在我看来,肯定有人以前做过这种事。没有Python包吗?

简单的答案是,在纯Python代码的py文件/块中无法做到这一点。

一旦解析了文件,就无法从Python中获取AST。这就是";宏";,是Python中经常要求的功能,因为它们可以让你做这样的事情。

可能有一些技巧性的方法,但粗略地说,你需要找到定义代码的文件,并将内容作为字符串进行操作;IPython可以做什么,就像它自己做解析一样。

或者您制作一个API,它采用多行字符串而不是Python代码块,这很丑陋,但可以工作。

更一般地说,如果您认为我们可以在IPython中使代码块更加可重用,请随时打开问题/拉取请求。

最新更新