为什么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以不同方式对待它们?