Python School
82.4K subscribers
2.4K photos
7 videos
568 links
Уроки по Python, которые упростят вам жизнь. Без идиотских туториалов.

Наши мемы для программистов: @conhum

Сотрудничество - @alivian

Канал сотрудничает с рекламным сервисом @Tgpodbor_official

РКН: clck.ru/3G6pBb
加入频道
Особенности выражений-генераторов (ч.1)

Генаратор нельзя писать без скобок — это синтаксическая ошибка.

При передаче в функцию дополнительные скобки необязательны.

Нельзя получить длину функцией len()

Нельзя распечатать элементы функцией print()
Особенности выражений-генераторов (ч.2)

Обратите внимание, что после прохождения по выражению-генератору оно остается пустым!

Выражение-генератор может быть бесконечным.

К выражению-генератору не применимы срезы!

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

Передачей готового выражения-генератора присвоенного переменной в функцию создания коллекции.
Создание коллекций из выражения-генератора (ч.2)

Написание выражения-генератора сразу внутри скобок вызываемой функции создания коллекции.
Генерация строк

Для создания строки вместо синтаксиса выражений-генераторов используется метод строки .join(), которому в качестве аргументов можно передать выражение генератор.
Обратите внимание: элементы коллекции для объединения в строку должны быть строками!
Работа с enumerate()

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

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

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

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

Выходом может быть использование функции islice() из пакета itertools.
Вложенный генератор внутри генератора — двумерная из двух одномерных

Общий синтаксис: [[expression for y in iter2] for x in iter1]

Применение: генерируем двумерную структуру, используя данные из двух одномерных итераторов.
Вложенные циклы for где циклы идут по независимым итераторам

Общий синтаксис: [expression for x in iter1 for y in iter2]
Применение: генерируем одномерную структуру, используя данные из двух итераторов.
Генератор итерирующийся по генератору

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

Общий синтаксис: [[expression for y in x] for x in iterator]

Применение: Обходим двумерную структуру данных, сохраняя результат в другую двумерную структуру.
Оператор морж (:=) или способ записывать данные в переменную о котором вы не знали

Начиная с Python 3.8, появился новый синтаксис под названием «оператор морж» или walrus operator, который может присваивать значения переменным как часть более крупного выражения.

Оператор := получил свое милое название из-за глаз и бивней моржа.
Избегайте вложенных циклов с помощью product

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

К счастью, в Python всегда можно избежать вложенных циклов с помощью встроенной функции product().
Используем * для мерджа списка, кортежа и множества в одну строчку

Для того, чтобы это сделать самый элегантный способ - использование *

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

Слияние словарей - частое действие в программировании на Python. Существует множество способов сделать это. Но все они были уродливы до версии Python 3.9.

Начиная с Python 3.9, мы наконец-то получили самый элегантный способ объединения словарей - использование операторов объединения.
Используем встроенные функции в Python для написания стандартной логики (ч.1)

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

Например, функция map() - известная и часто используемая функция. Она получает два параметра, один из которых - функция, а другой - итератор. При выполнении функции map функция применяется к каждому элементу в итераторе.
Используем встроенные функции в Python для написания стандартной логики
(ч.2)

Как показано в примере выше, с помощью функции map() мы можем избежать написания цикла for для выделения заглавными буквами каждого слова в списке имен.

Другая известная функция - reduce(). Как следует из ее названия, она применяет функцию к итератору и выполняет для нее операцию reduce.
Подсчет количества элементов

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

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

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

Списковое включение — самый эффективный способ итерации любого списка. Это итерирование однострочного списка с включением в него цикла. Посмотрите приведенный ниже пример кода, чтобы понять, как это работает.
Повторение элемента в списке

Чтобы увеличить количество строк, можно использовать звездочку *. Но этот лайфхак применим и к спискам.