Функция f
возвращается очень быстро.Когда вы используете cProfile, время, приписываемое одному вызову f
, не является точным, поскольку время настолько мало, что сравнимо с ошибкой измерения времени.Часы, используемые для измерения разницы во времени, могут быть с точностью только до 0,001 с.Таким образом, ошибка в каждом измерении может быть на несколько порядков больше, чем время, которое вы пытаетесь измерить.Сделайте это 1e7 раз, и вы получите поддельные результаты.(Подробнее об этом см. http://docs.python.org/library/profile.html#limitations.)
Обратите внимание: если вы измените код для использования
def f(a, b):
for i in xrange(int(1e4)):
c = a+b
# a simple loop
def loop():
for i in xrange(int(1e3)):
f(1,2)
, вы получите
Time taken 0.732 s.
1003 function calls in 0.725 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.725 0.725 <string>:1(<module>)
1000 0.723 0.001 0.723 0.001 test.py:4(f)
1 0.001 0.001 0.725 0.725 test.py:9(loop)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
Вы делаете то же количество циклов, но каждый вызов f
занимает больше времени.Это сокращает погрешность измерения.(Время, связанное с каждым вызовом f
, содержит ошибку, которая теперь не так велика, как общее измеренное время.)