return "".join([tmp for i in range(10000)])
def case4(): # Г. генераторное выражение и метод join
return "".join(tmp for i in range(10000))
for v in range(1,5):
print (Timer("func()","from __main__ import case%s as func" % v).timeit(200))
Как и в любом языке программирования, в Python имеются свои приёмы оптимизации кода. Оптимизировать код можно исходя из различных (часто конкурирующих друг с другом) критериев (увеличение быстродействия, уменьшение объёма требуемой оперативной памяти, компактность исходного кода и т. д.). Чаще всего программы оптимизируют по времени исполнения.
Здесь есть несколько очевидных для опытных программистов правил.
Не нужно оптимизировать программу, если скорость её выполнения достаточна.
Используемый алгоритм имеет определённую временную сложность, поэтому перед оптимизацией кода программы стоит сначала пересмотреть алгоритм.
Стоит использовать готовые и отлаженные функции и модули, даже если для этого нужно немного обработать данные. Например, в Python есть встроенная функция sorted().
Профилирование поможет выяснить узкие места. Оптимизацию нужно начинать с них.
Python имеет следующие особенности и связанные с ними правила оптимизации.
Вызов функций является достаточно дорогостоящей операцией, поэтому внутри вложенных циклов нужно стараться избегать вызова функций или, например, переносить цикл в функции. Функция, обрабатывающая последовательность, эффективнее, чем обработка той же последовательности в цикле вызовом функции.
Старайтесь вынести из глубоко вложенного цикла всё, что можно вычислить во внешних циклах. Доступ к локальным переменным более быстрый, чем к глобальным или чем доступ к полям.
Оптимизатор psyco может помочь ускорить работу модуля программы при условии, что модуль не использует динамических свойств языка Python.
В случае, если модуль проводит массированную обработку данных и оптимизация алгоритма и кода не помогает, можно переписать критические участки, скажем, на языке Си или Pyrex.
Инструмент под названием Pychecker[128] поможет проанализировать исходный код на Python и выдать рекомендации по найденным проблемам (например, неиспользуемые имена, изменение сигнатуры метода при его перегрузке и т. п.). В ходе такого статического анализа исходного кода могут быть выявлены и ошибки. Pylint[129] призван решать близкие задачи, но имеет уклон в сторону проверки стиля кода, поиска кода с запашком[130].
Do'stlaringiz bilan baham: |