Just Python
10.3K subscribers
4.34K photos
11 videos
4.32K links
🐍Простое изучение Python.

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: telega.in/c/justpython_it

РКН: clck.ru/3MnbSc
Download Telegram
Синтаксис среза

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

#theory // Just Python
Объединение строк, кортежей, списков, словарей без изменения исходных (ч.3)

Добавляем второй список как один элемент без изменения исходного списка (аналог метода.append() но без изменения исходного списка)

#theory // Just Python
Объединение строк, кортежей, списков, словарей без изменения исходных (ч.4)

Со словарем (dict) все не совсем просто.

Сложить два словаря чтобы получить третий оператором + Питон не позволяет «TypeError: unsupported operand type(s) for +: 'dict' and 'dict'».

Это можно сделать по-другому комбинируя методы .copy() и .update()

#theory // Just Python
Объединение множеств без изменения исходных

Для обоих типов множеств (set, frozenset) возможны различные варианты комбинации множеств (исходные множества при этом не меняются — возвращается новое множество).

#theory // Just Python
Объединение списка, словаря и изменяемого множества с изменением исходной коллекции (ч.1)

Для списка. Добавляем все элементы второго списка к элементам первого с измением первого списка методом .extend()

#theory // Just Python
Объединение списка, словаря и изменяемого множества с изменением исходной коллекции (ч.2)

Для изменения словаря с добавления элементов другого словаря используется метод .update().

Обратите внимание: для совпадающих ключей словаря при этом обновляются значения.

#theory // Just Python
Возможная ошибка при обработке элементов

Не меняйте количество элементов коллекции в теле цикла во время итерации по этой же коллекции! — Это порождает не всегда очевидные на первый взгляд ошибки. Чтобы этого избежать подобных побочных эффектов, можно, например, итерировать копию коллекции.

#theory // Just Python
Объединение списка, словаря и изменяемого множества с изменением исходной коллекции (ч.3)

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

#theory // Just Python
Особенности работы с изменяемой и не изменяемой коллекцией (ч.1)

Строка неизменяемая коллекция — если мы ее меняем — мы создаем новый объект!

#theory // Just Python
Особенности работы с изменяемой и не изменяемой коллекцией (ч.2)

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

#theory // Just Python
Создание объектов, поддерживающих выражение with

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

#theory // Just Python
Добавляем условие для фильтрации

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

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

#theory // Just Python
Добавляем обработку элемента в выражении

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

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

#theory // Just Python
Аналоги в виде цикла for и в виде функций

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

#theory // Just Python
Улучшаем читаемость

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

#theory // Just Python
Решение с помощью функций

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

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

#theory // Just Python
Выражения-генераторы

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

#theory // Just Python
Ветвление выражения

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

В данном случае if-else это не фильтр перед выполнением выражения, а ветвление самого выражения, то есть переменная уже прошла фильтр, но в зависимости от условия может быть обработана по-разному!

#theory // Just Python
Особенности выражений-генераторов (ч.1)

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

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

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

Нельзя распечатать элементы функцией print()

#theory // Just Python
Особенности выражений-генераторов (ч.2)

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

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

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

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

#theory // Just Python
Создание коллекций из выражения-генератора (ч.1)

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

#theory // Just Python