Ускорить петли Python: проверенные методы, чтобы быстрее сделать ваш код

Введение

Петли являются неотъемлемой частью языка программирования Python. Цикл — это структура управления, которая позволяет многократно выполнять кодовые блоки для определенного количества итераций до тех пор, пока условие не будет выполнено.

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

Вы можете использовать петли для операций файлов, анализа данных и разработки игр.

Тем не менее, есть один недостаток в петлях Python: отсутствие скорости.

Почему петли Python чувствуют себя медленными

Петли Python позорно медленны, и для этого есть несколько причин, таких как накладные расходы интерпретатора, распределение памяти и сделка, создание объектов, вызовы функций и рекурсия, глобальная блокировка интерпретатора и многое другое.

Давайте посмотрим на некоторые особенности этих проблем.

Переводчик над головой

Когда запускается цикл Python, интерпретатор должен выполнять дополнительные задачи, такие как анализ кода, создавая кадр стека для каждой итерации и обновления переменных и структур данных. Все это может заставить петли чувствовать себя медленнее, чем следовало.

Динамические затраты на типинг

Динамическое типирование вводит дополнительную сложность и накладные расходы (по сравнению с статически напечатанными языками). С динамически напечатанным языком, интерпретатор должен выполнять проверки типа времени выполнения для каждой операции, которая включает в себя проверку типов переменных, аргументов функций и возвратных значений. Эта проверка типа может привести к более медленной производительности из -за дополнительных вычислений.

Сначала тесты: профилируйте ваши петли

Профилирование петлей является важным процессом в оптимизации их производительности. Чтобы профилировать цикл, вы должны определить узкие места и понять время исполнения. Для этого вы должны выбрать инструмент профилирования, такой как Timeit, Cprofile Module или библиотека Line_profiler.

Использование TimeIt для микро-распаковки

Использование TimeIt для микро-вспышки петли Python выглядит примерно так:

При написании эффективных микросхемков с Timeit, рассмотрите эти советы:

  • Минимизировать внешние зависимости, избегая кода, который зависит от внешних библиотек или модулей.
  • Используйте последовательное семя во всех пробегах.
  • Запустите несколько итераций.
  • Используйте подходящий доверительный интервал или анализ p-значения.

Обнаружение горячих дорожек с помощью cProfile

Горячие пути относятся к наиболее часто выполняемым строкам кода в программе и могут повлиять на общую производительность. Использование Cprofile может помочь идентифицировать их, чтобы они могли быть оптимизированы. Чтобы использовать Cprofile, вы должны:

  • Установите и импортируйте библиотеку.
  • Оберните свою функцию или модуль, используя декоратор @profile ().
  • Запустите Profiler, позвонив в Profiler.enable () перед запуском вашего кода, а затем используйте Profiler.disable () после запуска кода.

Вот пример:

Заменить петли на встроенные

Замена петли на встроенные функции-отличный способ оптимизации для производительности. Например, вы можете использовать Map () вместо цикла для.

Вот пример для петли:

Если вы не уверены, когда вам следует использовать петлю против встроенной функции:

  • Используйте петли для небольших наборов данных.
  • Используйте петли для сложной логики.
  • Используйте цикл для пользовательских операций.

Кроме вышеперечисленного, используйте встроенную функцию.

Охватить векторизацию

Векторизация относится к процессу выполнения операций на целых массивах или векторах одновременно (в отличие от итерации над каждым элементом индивидуально). Лучший способ сделать это — через Numpy.

Вот пример векторизации с Numpy:

Оптимизировать корпус петли

Оптимизация тела петли включает в себя:

  • Уменьшение количества итераций.
  • Минимизация вычислений.
  • Использование встроенных функций.

Чтобы оптимизировать корпус петли, вы можете:

  • Используйте список понимания.
  • Избегайте глобальных переменных.
  • Используйте итераторы.

Эффективные итерационные модели

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

Перечисление-это встроенная функция, которая возвращает итератор, который производит кортеж, содержащий количество, а также значения, полученные из итерации. Вот пример:

ZIP-это еще одна встроенная функция, которая принимает итераблеры и объединяет их в один итератор кортежей. Вот пример:

Распаковка позволяет назначать значения из итератора непосредственно в переменные и работает так:

Заключение

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

Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Джек Уоллен-это то, что происходит, когда генеральный разум с умом с современным Snark. Джек — искатель истины и писатель слов с квантовым механическим карандашом и разрозненным ударом звука и души. Хотя он проживает … читайте больше от Джека Валлена

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *