【发布时间】:2013-03-26 20:02:04
【问题描述】:
当我使用pstats 显示分析数据时,第一列是每个函数的调用次数。
但是,当我对数据进行排序时,我可以在 calls、ncalls 和 pcalls 键之间进行选择。文档说calls 和ncalls 是调用计数,而pcalls 是原始调用计数。按calls 或ncalls 排序是否相同? pcalls 有什么不同?
【问题讨论】:
当我使用pstats 显示分析数据时,第一列是每个函数的调用次数。
但是,当我对数据进行排序时,我可以在 calls、ncalls 和 pcalls 键之间进行选择。文档说calls 和ncalls 是调用计数,而pcalls 是原始调用计数。按calls 或ncalls 排序是否相同? pcalls 有什么不同?
【问题讨论】:
http://docs.python.org/2/library/profile.html#module-cProfile
我们将原语定义为调用不是通过递归引起的。
...当函数不递归时,这两个值是一样的
按calls或ncalls排序是一样的。
当第一列有两个数字时(例如,43/3),则后者为原始调用次数,前者为实际调用次数。注意,当函数不递归时,这两个值是一样的,只有单数是 打印:
In [43]: def a(i):
....: if i == 0:
....: return
....: a(i-1)
....:
In [54]: %prun a(0)
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <ipython-input-43-25b7f3d268b8>:1(a)
In [55]: %prun a(1)
ncalls tottime percall cumtime percall filename:lineno(function)
2/1 0.000 0.000 0.000 0.000 <ipython-input-43-25b7f3d268b8>:1(a)
In [56]: %prun a(3)
ncalls tottime percall cumtime percall filename:lineno(function)
4/1 0.000 0.000 0.000 0.000 <ipython-input-43-25b7f3d268b8>:1(a)
【讨论】: