当我使用pstats
显示分析数据时,第一列是每个函数的调用次数。
但是,当我对数据进行排序时,我可以选择calls
,ncalls
和pcalls
个键。文档说calls
和ncalls
是调用次数,当pcalls
是原始调用次数时。按calls
或ncalls
排序是一样的吗?与pcalls
有什么不同?
答案 0 :(得分:13)
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)