Язык программирования Python.

Модуль timeit.

Предположим, что проводится оптимизация небольшого участка кода. Необходимо определить, какой из вариантов кода является наиболее быстрым. Это можно сделать с помощью модуля timeit.

В следующей программе используется метод timeit() для измерения времени, необходимого для вычисления небольшого фрагмента кода. Измерения проводятся для трех вариантов кода, делающих одно и то же: конкатенирующих десять тысяч строк в одну строку. В первом случае используется наиболее естественный, «лобовой» прием инкрементной конкатенации, во втором — накопление строк в списке с последующим объединением в одну строку, в третьем применяется списковое включение, а затем объединение элементов списка в одну строку:

From timeit import Timer.

T = Timer(""".

Res = "".

For k in range(1000000,1010000):

 res += str(k).

""").

Print t.timeit(200).

T = Timer(""".

Res = [].

For k in range(1000000,1010000):

 res.append(str(k)).

Res = ",".join(res).

""").

Print t.timeit(200).

T = Timer(""".

Res = ",".join([str(k) for k in range(1000000,1010000)]).

""").

Print t.timeit(200).

Разные версии Python дадут различные результаты прогонов:

# Python 2.3.

77.6665899754.

10.1372740269.

9.07727599144.

# Python 2.4.

9.26631307602.

9.8416929245.

7.36629199982.

В старых версиях Python рекомендуемым способом конкатенации большого количества строк являлось накопление их в списке с последующим применением функции join() (кстати, инкрементная конкатенация почти в восемь раз медленнее этого приема). Начиная с версии 2.4, инкрементная конкатенация была оптимизирована и теперь имеет даже лучший результат, чем версия со списками (которая вдобавок требует больше памяти). Но чемпионом все–таки является работа со списковым включением, поэтому свертывание циклов в списковое включение позволяет повысить эффективность кода.

Если требуются более точные результаты, рекомендуется использовать метод repeat(n, k) — он позволяет вызывать timeit(k) n раз, возвращая список из n значений. Необходимо отметить, что на результаты может влиять загруженность компьютера, на котором проводятся испытания.