Может быть много объяснений, таких как другой набор каталогов (и zip-файлов) на sys.path
, автоматически загружаемый / исполняемый код при инициализации, другие процессы, выполняющиеся на платформе - ваш код совсем не изолирован и не повторяется поэтому его результаты имеют очень мало значения. Используйте python -mtimeit
, чтобы измерить многое, намного лучше.
Редактировать : некоторые цифры ...:
$ py26 -mtimeit 'q=2**1000000000; q+=3<<1000000000'
10 loops, best of 3: 466 msec per loop
$ py31 -mtimeit 'q=2**1000000000; q+=3<<1000000000'
10 loops, best of 3: 444 msec per loop
они точно измеряют время +=
(немного лучше / более оптимизировано в 3.1, повторяемо). Если вы хотите измерить увеличение смещения или до степени , то, конечно, вы не можете использовать литералы (поскольку выражения литералов вычисляются во время компиляции, а не во время выполнения: часть того, почему вы хотите, чтобы весь ваш значимый код был в функциях в модулях, , а не в коде верхнего уровня или в вашем основном скрипте ... так что компилятор может выполнять как можно большую часть работы, насколько это возможно несмотря на отсутствие каких-либо серьезных оптимизаций ;-). E.g.:
$ py31 -mtimeit -s't=2' 'q=t**1000000'
10 loops, best of 3: 19.4 msec per loop
$ py31 -mtimeit -s't=3' 'q=t<<1000000'
10000 loops, best of 3: 150 usec per loop
(просто требуется слишком много времени, чтобы сделать их с большим операндом RHS, который вы используете, и я теряю терпение ;-). Микширование операций, конечно, было бы печальной катастрофой с точки зрения измерения, поскольку относительно быстрые из них по существу исчезнут в миксе! -) К счастью, для такого микширования нет веской причины - в конце концов, timeit
микро бенчмаркинг! -)