Даже если ты программист, перешедший с других языков, таких как C, в программирование на Python с более высоким уровнем абстракции – не стоит пугаться и отступать перед “не таким” кодом. Погнали!
List comprehensions – компактный код
Многие назвали бы lambda
,
map
и filter
"трюками" Python, которым должен научиться каждый новичок.
Принято считать, что эти функции большую часть времени, не особенно полезны,
поскольку им не хватает гибкости.
Лямбда – это метод
составления функции в одну строку для одноразового использования. Если он
вызывается несколько раз, страдает производительность. С другой стороны, map
применяет функцию ко всем элементам списка, в то время как filter
получает
подмножество элементов в наборе, удовлетворяющем пользовательскому условию.
List comprehensions – это лаконичный метод для создания списков из других списков с гибкими выражениями и условиями. Он выделяется квадратными скобками, в которых определено выражение или функция. Когда элемент удовлетворяет условию, только в этом случае действие применяется к каждому элементу списка. Метод также может обрабатывать вложенные списки продуктивнее, чем использование мапы и фильтра.
Манипуляции со списками – циклические списки
Python поддерживает
отрицательную индексацию, где aList[-1] == aList[len(aList)-1]
. Исходя из этого,
можно получить второй последний элемент в списке – aList[-2]
и так далее.
Также можно нарезать
списки с помощью записи aList[start:end: step]
, где начальный элемент указан, а
конечный – нет. Поэтому вызов aList[2:5]
вернет [2, 3, 4]
, а вызвав aList[::
-1]
, ты сможешь переставить элементы в списке в обратном порядке – очень элегантная техника.
А еще списки могут быть распакованы в отдельные элементы или сливать элементы, которые не влезли в лимит переменных, в подсписок, используя звездочку.
zip, enumerate и for-loops
Функция zip
создает итератор, который агрегирует элементы из
нескольких списков. Он позволяет выполнять параллельный обход списков в цикле for
и
параллельную сортировку. Обратное действие (unzip
) совершается с помощью звездочки.
enumerate
может
показаться немного пугающим, но данную функцию удобно
применять во многих ситуациях. Наиболее популярный вариант – автоматический
счетчик для цикла for
: больше нет
необходимости создавать и инициализировать переменную счетчика с помощью counter = 0
и counter
+= 1
. enumerate
и zip
– это два самых мощных инструмента при построении
цикла for
.
Генератор – эффективность использования памяти
Генераторы используются, когда нужно вычислить большой набор результатов, но необходимо избежать одновременного выделения памяти под все результаты. Другими словами, они генерируют значения на лету и не хранят предыдущие значения в памяти, поэтому их можно итерировать только раз.
Они часто используются
при чтении больших файлов или создании бесконечной последовательности при
помощи ключевого слова yield
.
Виртуальная среда – изоляция
Самая интересная и увлекательная штука из подборки.
Приложения Python часто используют множество пакетов от различных разработчиков со сложными зависимостями. Разные приложения создаются с использованием определенных наборов библиотек, в которых выходные данные не могут быть использованы другими версиями библиотеки. Не существует единой установки, которая удовлетворяла бы требованиям всех приложений.
Поэтому крайне важно создать отдельные автономные виртуальные среды venv для каждого приложения, что и можно сделать с помощью pip или conda.
Комментарии