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

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

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

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

РКН: clck.ru/3G6pBb
加入频道
This media is not supported in your browser
VIEW IN TELEGRAM
AI Journey 2023 — международная конференция по ИИ, пройдёт с 22 по 24 ноября.

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

После чего будут подведены итоги отбора научных статей AI Journey Science и награждение победителей соревнований AI Challenge и AIJ Contest.

Больше информации о конференции можно найти на сайте.
Особенности работы с изменяемой и не изменяемой коллекцией (ч.2)

Список изменяем и тут надо быть очень внимательным, чтобы не допустить серьезную ошибку! Сравните данный пример с предыдущем примером со строками.
Особенности работы с изменяемой и не изменяемой коллекцией (ч.2)

Список изменяем и тут надо быть очень внимательным, чтобы не допустить серьезную ошибку! Сравните данный пример с предыдущем примером со строками.
Создание объектов, поддерживающих выражение with

Все знают о том, как, например, открыть файл, или, возможно, как установить блокировку с использованием оператора with. Но можно ли самостоятельно реализовать механизм управления блокировками? Да, это вполне реально. Протокол управления контекстом исполнения реализуется с использованием методов enter и exit
Добавляем условие для фильтрации

Важно: Условие проверяется на каждой итерации, и только элементы ему удовлетворяющие идут в обработку в выражении.

Мы можем использовать несколько условий, комбинируя их логическими операторами
Добавляем обработку элемента в выражении

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

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

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

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

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

Можно применять и более старые функциональные подходы для решения тех же задач, комбинируя map(), lambda и filter().
Выражения-генераторы

Выражения-генераторы (generator expressions) доступны, начиная с Python 2.4. Основное их отличие от генераторов коллекций в том, что они выдают элемент по-одному, не загружая в память сразу всю коллекцию.
Ветвление выражения

Условия ветвления пишутся не после, а перед итератором.

В данном случае if-else это не фильтр перед выполнением выражения, а ветвление самого выражения, то есть переменная уже прошла фильтр, но в зависимости от условия может быть обработана по-разному!
Особенности выражений-генераторов (ч.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]
Применение: генерируем одномерную структуру, используя данные из двух итераторов.