Python探查器没有显示内置的操作员调用和tottime

时间:2015-04-26 13:34:31

标签: python profiling

为什么CPython探查器没有显示内置运算符调用和tottime? 例如:

cProfile.run("for i in range(20000):a=2**i")
        3 function calls in 0.341 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.341    0.341    0.341    0.341 <string>:1(<module>)
        1    0.000    0.000    0.341    0.341 {built-in method exec}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



cProfile.run("for i in range(20000):a=pow(2,i)")
        20003 function calls in 0.340 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.004    0.004    0.340    0.340 <string>:1(<module>)
        1    0.000    0.000    0.340    0.340 {built-in method exec}
    20000    0.336    0.000    0.336    0.000 {built-in method pow}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

在第一种情况下,大部分的tottime花费在“string:1(module)”中,根据我的理解,这是探查器告诉“我在你给我的字符串语句中”的方式。 然而,第二种情况更具体地显示了在“战俘”中花费的时间

我认为pow和**是等价物,**只是语法糖,**实际上是叫pow。情况并非如此?或者cProfile不显示内置运算符,除非在某些选项中指定?

谢谢,

编辑: 我理解,在“+”,“ - ”等中显示所有时间的探查器不是所希望的行为。我的问题更多的是这种区别的来源:是因为战俘和**本质上是不同的吗?还是因为cProfile以不同方式对待它们?

0 个答案:

没有答案