Способы ускорить исполнение кода в Python

  • Автор записи:
  • Запись опубликована:07.11.2023
  • Рубрика записи:Python

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

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

Используйте векторизацию и библиотеки научных вычислений

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

Используйте встроенные функции NumPy для выполнения операций над массивами, такие как суммирование, умножение и т.д. Они реализованы на языке C и работают значительно быстрее, чем их эквиваленты на чистом Python.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
result = arr * 2
print(result)

Правильно выбирайте структуры данных

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

data = {
    'apple': 5,
    'banana': 3,
    'orange': 8
}

print(data['apple'])

Если вам нужно выполнять множественные операции вставки и удаления элементов, рассмотрите использование специализированных структур данных, таких как множества (set) или связанные списки (linked list).

Соединяйте строки методом join

В Python конкатенацию строк можно производить при помощи знака +.

concatenatedString = "Программирование " + "это " + "весело."

Но также для этого есть метод join().

concatenatedString = " ".join (["Программирование", "это", "весело."])

Всё дело в том, что оператор + каждый раз создаёт новую строку, а затем копирует в неё исходные. join() устроен иначе и обеспечивает выигрыш во времени.

Не пренебрегайте множественным присваиванием

Не стоит инициализировать несколько переменных так:

a = 2
b = 3
c = 5
d = 7

Лучше придерживайтесь следующего синтаксиса:

a, b, c, d = 2, 3, 5, 7

Применяйте списковые включения (list comprehension)

Не обращайтесь ни к какой другой технике, если можно использовать списковые включения. Например, этот код заносит в список все числа между 1 и 1000, кратные 3:

L = []
for i in range (1, 1000):
    if i%3 == 0:
        L.append (i)

Со списковыми включениями код трансформируется в одну строку:

L = [i for i in range (1, 1000) if i%3 == 0]

Этот приём работает быстрее, чем просто метод append().

Проверка на True

При проверке условий в программе, необходимо избегать явного указания == True или is True для проверки переменных на истинность. Вместо этого достаточно указать имя переменной в условии if. Такая запись является более эффективной, поскольку не требует вызова “магической” функции __eq__ для сравнения значений.

if string:
  pass

Цикл for внутри функции

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

def compute_cubic1(number):
  return number**3

%%time
new_list_cubic1 = [compute_cubic1(number) for number in a_long_list]

# Вывод в консоль
# CPU times: user 335 ms, sys: 14.3 ms, total: 349 ms
# Wall time: 354 ms

Однако правильнее будет перевернуть конструкцию – и поместить цикл внутрь функции.

def compute_cubic2():
  return [number**3 for number in a_long_list]

%%time
new_list_cubic2 = compute_cubic2()

# Вывод в консоль
# CPU times: user 261 ms, sys: 15.7 ms, total: 277 ms
# Wall time: 277 ms

Заключение

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

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

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

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.