Создание объектов, поддерживающих выражение with
Все знают о том, как, например, открыть файл, или, возможно, как установить блокировку с использованием оператора with. Но можно ли самостоятельно реализовать механизм управления блокировками? Да, это вполне реально. Протокол управления контекстом исполнения реализуется с использованием методов enter и exit
#theory // Just Python
Все знают о том, как, например, открыть файл, или, возможно, как установить блокировку с использованием оператора with. Но можно ли самостоятельно реализовать механизм управления блокировками? Да, это вполне реально. Протокол управления контекстом исполнения реализуется с использованием методов enter и exit
#theory // Just Python
Добавляем условие для фильтрации
Важно: Условие проверяется на каждой итерации, и только элементы ему удовлетворяющие идут в обработку в выражении.
Мы можем использовать несколько условий, комбинируя их логическими операторами
#theory // Just Python
Важно: Условие проверяется на каждой итерации, и только элементы ему удовлетворяющие идут в обработку в выражении.
Мы можем использовать несколько условий, комбинируя их логическими операторами
#theory // Just Python
Добавляем обработку элемента в выражении
Мы можем вставлять не сам текущий элемент, прошедший фильтр, а результат вычисления выражения с ним или результат его обработки функцией.
Выражение выполняется независимо на каждой итерации, обрабатывая каждый элемент индивидуально.
#theory // Just Python
Мы можем вставлять не сам текущий элемент, прошедший фильтр, а результат вычисления выражения с ним или результат его обработки функцией.
Выражение выполняется независимо на каждой итерации, обрабатывая каждый элемент индивидуально.
#theory // Just Python
Аналоги в виде цикла for и в виде функций
Задачи решаемые с помощью генераторов выражений можно решить и без них. Каждый генератор выражений можно переписать в виде цикла for, но не каждый цикл for можно представить в виде такого выражения.
#theory // Just Python
Задачи решаемые с помощью генераторов выражений можно решить и без них. Каждый генератор выражений можно переписать в виде цикла for, но не каждый цикл for можно представить в виде такого выражения.
#theory // Just Python
Улучшаем читаемость
Не забываем, что в Python синтаксис позволяет использовать переносы строк внутри скобок. Используя эту возможность, можно сделать синтаксис генераторов выражений более легким для чтения.
#theory // Just Python
Не забываем, что в Python синтаксис позволяет использовать переносы строк внутри скобок. Используя эту возможность, можно сделать синтаксис генераторов выражений более легким для чтения.
#theory // Just Python
Решение с помощью функций
Для начала, замечу, что выражение генераторы и генераторы коллекций — это тоже функциональный стиль, но более новый и предпочтительный.
Можно применять и более старые функциональные подходы для решения тех же задач, комбинируя map(), lambda и filter().
#theory // Just Python
Для начала, замечу, что выражение генераторы и генераторы коллекций — это тоже функциональный стиль, но более новый и предпочтительный.
Можно применять и более старые функциональные подходы для решения тех же задач, комбинируя map(), lambda и filter().
#theory // Just Python
Выражения-генераторы
Выражения-генераторы (generator expressions) доступны, начиная с Python 2.4. Основное их отличие от генераторов коллекций в том, что они выдают элемент по-одному, не загружая в память сразу всю коллекцию.
#theory // Just Python
Выражения-генераторы (generator expressions) доступны, начиная с Python 2.4. Основное их отличие от генераторов коллекций в том, что они выдают элемент по-одному, не загружая в память сразу всю коллекцию.
#theory // Just Python
Ветвление выражения
Условия ветвления пишутся не после, а перед итератором.
В данном случае if-else это не фильтр перед выполнением выражения, а ветвление самого выражения, то есть переменная уже прошла фильтр, но в зависимости от условия может быть обработана по-разному!
#theory // Just Python
Условия ветвления пишутся не после, а перед итератором.
В данном случае if-else это не фильтр перед выполнением выражения, а ветвление самого выражения, то есть переменная уже прошла фильтр, но в зависимости от условия может быть обработана по-разному!
#theory // Just Python
Особенности выражений-генераторов (ч.1)
Генаратор нельзя писать без скобок — это синтаксическая ошибка.
При передаче в функцию дополнительные скобки необязательны.
Нельзя получить длину функцией len()
Нельзя распечатать элементы функцией print()
#theory // Just Python
Генаратор нельзя писать без скобок — это синтаксическая ошибка.
При передаче в функцию дополнительные скобки необязательны.
Нельзя получить длину функцией len()
Нельзя распечатать элементы функцией print()
#theory // Just Python
Особенности выражений-генераторов (ч.2)
Обратите внимание, что после прохождения по выражению-генератору оно остается пустым!
Выражение-генератор может быть бесконечным.
К выражению-генератору не применимы срезы!
Из генератора легко получать нужную коллекцию. Это подробно рассматривается в следующей главе.
#theory // Just Python
Обратите внимание, что после прохождения по выражению-генератору оно остается пустым!
Выражение-генератор может быть бесконечным.
К выражению-генератору не применимы срезы!
Из генератора легко получать нужную коллекцию. Это подробно рассматривается в следующей главе.
#theory // Just Python
Создание коллекций из выражения-генератора (ч.1)
Передачей готового выражения-генератора присвоенного переменной в функцию создания коллекции.
#theory // Just Python
Передачей готового выражения-генератора присвоенного переменной в функцию создания коллекции.
#theory // Just Python
Создание коллекций из выражения-генератора (ч.2)
Написание выражения-генератора сразу внутри скобок вызываемой функции создания коллекции.
#theory // Just Python
Написание выражения-генератора сразу внутри скобок вызываемой функции создания коллекции.
#theory // Just Python
Использование with для автоматического закрытия файлов
В Python конструкция with позволяет автоматически управлять ресурсами, такими как файлы, гарантируя их корректное закрытие после завершения работы с ними. Это избавляет от необходимости вручную закрывать файлы и предотвращает возможные ошибки, связанные с их неправильным закрытием.
Использование конструкции with для работы с файлами улучшает читаемость кода и делает его более надежным, автоматически управляя жизненным циклом ресурсов.
#theory // Just Python
В Python конструкция with позволяет автоматически управлять ресурсами, такими как файлы, гарантируя их корректное закрытие после завершения работы с ними. Это избавляет от необходимости вручную закрывать файлы и предотвращает возможные ошибки, связанные с их неправильным закрытием.
Использование конструкции with для работы с файлами улучшает читаемость кода и делает его более надежным, автоматически управляя жизненным циклом ресурсов.
#theory // Just Python
⚡️Лёгких денег в бизнесе не бывает
❗️ Многие думают: запустил дело — и пошло. Деньги капают, процессы делегированы, жизнь удалась.
А потом внезапно — кассовый разрыв, мёртвая ниша и минус на счёте.
84% бизнесов прогорают именно так — не из-за налогов или конкурентов, а из-за непонимания, как реально работает рынок и банки.
Канал Бизнесовый — про настоящую сторону предпринимательства. Без глянца и псевдоуспеха. Автор разбирает, как мыслить системно, выстраивать процессы и зарабатывать не на хайпе, а на опыте.
Хочешь перестать быть в числе 84%?
Подписывайся — https://t.iss.one/+cfit7wtolMtkNDhi
❗️ Многие думают: запустил дело — и пошло. Деньги капают, процессы делегированы, жизнь удалась.
А потом внезапно — кассовый разрыв, мёртвая ниша и минус на счёте.
84% бизнесов прогорают именно так — не из-за налогов или конкурентов, а из-за непонимания, как реально работает рынок и банки.
Канал Бизнесовый — про настоящую сторону предпринимательства. Без глянца и псевдоуспеха. Автор разбирает, как мыслить системно, выстраивать процессы и зарабатывать не на хайпе, а на опыте.
Хочешь перестать быть в числе 84%?
Подписывайся — https://t.iss.one/+cfit7wtolMtkNDhi
Использование Counter из модуля collections для подсчета элементов
Модуль collections в Python предоставляет класс Counter, который позволяет легко подсчитывать количество вхождений элементов в итерируемом объекте. Это полезно для анализа данных, работы с текстами и любых задач, связанных с подсчетом частоты элементов.
Использование Counter из модуля collections позволяет значительно упростить и ускорить задачи, связанные с подсчетом элементов, делая код более чистым и эффективным
#theory // Just Python
Модуль collections в Python предоставляет класс Counter, который позволяет легко подсчитывать количество вхождений элементов в итерируемом объекте. Это полезно для анализа данных, работы с текстами и любых задач, связанных с подсчетом частоты элементов.
Использование Counter из модуля collections позволяет значительно упростить и ускорить задачи, связанные с подсчетом элементов, делая код более чистым и эффективным
#theory // Just Python
Работа с enumerate()
Иногда в условиях задачи в условии-фильтре нужна не проверка значения текущего элемента, а проверка на определенную периодичность, то есть, например, нужно брать каждый третий элемент.
Для подобных задач можно использовать функцию enumerate(), задающую счетчик при обходе итератора в цикле.
#theory // Just Python
Иногда в условиях задачи в условии-фильтре нужна не проверка значения текущего элемента, а проверка на определенную периодичность, то есть, например, нужно брать каждый третий элемент.
Для подобных задач можно использовать функцию enumerate(), задающую счетчик при обходе итератора в цикле.
#theory // Just Python
Перебор части итерируемого.
Иногда бывает задача из очень большой коллекции или даже бесконечного генератора получить выборку первых нескольких элементов, удовлетворяющих условию.
Если мы используем обычное генераторное выражение с условием ограничением по enumerate() индексу или срез полученной результирующей коллекции, то нам в любом случае придется пройти всю огромную коллекцию и потратить на это уйму компьютерных ресурсов.
Выходом может быть использование функции islice() из пакета itertools.
#theory // Just Python
Иногда бывает задача из очень большой коллекции или даже бесконечного генератора получить выборку первых нескольких элементов, удовлетворяющих условию.
Если мы используем обычное генераторное выражение с условием ограничением по enumerate() индексу или срез полученной результирующей коллекции, то нам в любом случае придется пройти всю огромную коллекцию и потратить на это уйму компьютерных ресурсов.
Выходом может быть использование функции islice() из пакета itertools.
#theory // Just Python
Вложенный генератор внутри генератора — двумерная из двух одномерных
Общий синтаксис: [[expression for y in iter2] for x in iter1]
Применение: генерируем двумерную структуру, используя данные из двух одномерных итераторов.
#theory // Just Python
Общий синтаксис: [[expression for y in iter2] for x in iter1]
Применение: генерируем двумерную структуру, используя данные из двух одномерных итераторов.
#theory // Just Python
Вложенные циклы for где циклы идут по независимым итераторам
Общий синтаксис: [expression for x in iter1 for y in iter2]
Применение: генерируем одномерную структуру, используя данные из двух итераторов.
#theory // Just Python
Общий синтаксис: [expression for x in iter1 for y in iter2]
Применение: генерируем одномерную структуру, используя данные из двух итераторов.
#theory // Just Python