Поднимите эффективность вашего кода на новый уровень
Python стал известен как язык программирования в последнее десятилетие. Это отличный инструмент, помогающий не только в разработке бэкэнда, но и в науке о данных и автоматизации.
Простота языка позволяет любому начать его изучение. Python имеет простой синтаксис, и это очень помогает в создании программного обеспечения.
Однако существует множество подводных камней, а неэффективный код может значительно снизить производительность.
Хорошая новость заключается в том, что таких проблем можно избежать. В Python есть рекомендации, как сделать ваш код быстрее. Что это? Давайте исследовать.
Используйте встроенные функции
Разработчики Python стараются максимально эффективно выполнять наиболее распространенные действия. Они реализовали функции для покрытия этих действий. Например, у нас есть min()
, max()
, sum()
и еще много полезных функций.
Они встроены и доступны без дополнительного импорта. И показывают хорошую производительность.
Итак, каждый раз, когда вам нужно суммировать все элементы массива, рассмотрите возможность использования встроенной функции sum()
вместо реализации собственного алгоритма.
Используйте набор для эффективного поиска
Set — еще одна структура данных, о которой часто забывают. Программисты активно используют списки и словари, но редко используют наборы.
Тем не менее, когда дело доходит до поиска уникальных элементов в коллекции или быстрой проверки включения, набор демонстрирует исключительную производительность.
collection = [x for x in range(100_000)] exists = 1000 in collection >> Duration: 0.000015020 collection = set(x for x in range(100_000)) exists = 1000 in collection >> Duration: 0.000001907
В приведенном выше примере мы видим, что проверка наличия элемента в наборе происходит примерно в 7 раз быстрее, чем в списке.
Используйте перечисление вместо диапазона для доступа к индексу
Если вам нужно перебрать коллекцию и иметь индексы, лучший способ добиться этого — использовать enumerate
.
Эта опция быстрее, чем перебор range
. Кроме того, нам не нужно обращаться к элементу по индексу, так как enumerate
делает это за нас.
collection = range(0, 1_000_000) for i in range(len(collection)): print(collection[i]) >> Duration: 0.114128828 collection = range(0, 1_000_000) for i, number in enumerate(collection): print(number) >> Duration: 0.062491894
Мы видим, что случай с enumerate
почти в два раза быстрее, чем случай с range
в этом примере. Это потому, что внутри enumerate
генерируется специальный объект для перечисления. Он эффективно возвращает элемент и индекс за один запуск.
Применить понимание списков для создания списков
Понимание списков — широко используемая функция в Python. Перебирать список и преобразовывать элементы можно только в одной строке.
Но дополнительный момент в том, что он имеет хорошую производительность. Давайте сравним его с обычным циклом for
.
collection = range(0, 1_000_000) newlist = [] for item in collection: newlist.append(item) >> Duration: 0.065476894 collection = range(0, 1_000_000) newlist = [item for item in collection] >> Duration: 0.024003267
Этот пример демонстрирует, что понимание списка в три раза быстрее.
Новички обычно борются с синтаксисом этой функции, особенно когда есть несколько вложенных уровней. Но как только они овладеют им, они будут применять его везде.
Используйте соединение вместо «+» для объединения строк
Когда мы вместе думаем о конкатенации строк, первое, что приходит нам на ум, это оператор +
. Потому что это интуитивно. Когда первая строка 'hello,'
, а вторая строка 'world'
. Чтобы объединить их, нам нужно написать 'hello,' + 'world'
.
Проблема с таким способом конкатенации строк заключается в производительности. При каждой операции +
будет создаваться новая строка. Объединение двух строк таким образом не имеет большого значения. Но когда дело доходит до большего количества строк, вы увидите снижение производительности.
Эффективным способом объединения строк является использование функции join()
.
strings = ["Python", "is", "amazing", "when", "you", "follow", "pro", "tips", "and", "advice"] string_concat = "" for s in strings: string_concat += s >> Duration: 0.000010014 strings = ["Python", "is", "amazing", "when", "you", "follow", "pro", "tips", "and", "advice"] string_concat = "".join(strings) >> Duration: 0.000002861
Производительность уже видна на небольшом количестве струн. Но разница станет больше с увеличением количества строк для объединения.
Заключение
Список для повышения производительности вашего кода Python может расти. Некоторые советы могут относиться только к конкретному сценарию.
Советы, которые мы рассмотрели в этой статье, считаются лучшими практиками в Python. Вы, вероятно, не заметите никакой разницы на небольших наборах данных. Но когда количество данных, которые вам нужно обработать, достаточно велико, вы увидите значительный выигрыш в производительности.
Want to become a better software developer? Do you want to grow professionally as a software engineer? Are you curious about how to achieve the next level in your career? My book "Unlock the Code" offers a comprehensive list of steps to boost your professional life.