🐍 Укус питона 🐍
2.61K subscribers
975 photos
17 videos
284 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
Получение значений по ключам

Pattern matching позволяет получить значения элементов в переменные в виде, первый пример:

Например, смотрим код:

В первом шаблоне значение элемента с ключом "red" попадает в переменную red, а элемента с ключом "blue" - в переменную blue.

🐍 Укус питона // 💬 Чат // #теория #pattern_matching
Получение всех значений

С помощью символов ** (двойная звездочка) можно получить остальные элементы словаря, смотрим код:

Здесь шаблон {"red": red, **rest} соответствует любому словарь, в котором есть элемент с ключом "red". Все остальные элементы словаря помещаются в параметр rest, который сам в свою очередь представляет словарь.

🐍 Укус питона // 💬 Чат // #теория #pattern_matching
Классы в pattern matching

Python позволяет использовать в pattern matching в качестве шаблонов объекты классов. Рассмотрим на примере:

Здесь определен класс Person, который через конструктор принимает значения для атрибутов self.name и self.age.

🐍 Укус питона // 💬 Чат // #теория #pattern_matching #классы
📌 Уже 25 декабря в 19:00 (мск) стартует наш бесплатный двухдневный онлайн-интенсив.

Во время эфира вы научитесь писать код, запускать и поддерживать простого Telegram-бота. Познакомитесь с синтаксисом языка и увидите, как декомпозировать задачи по разработке.

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

🎁 Всем, кто зарегистрировался — Гайд «Как заговорить на сленге IT-специалистов», а каждому участнику — Карта компетенций Python-разработчика.

Также вас ждут бонусы на обучение на Хекслете и новогодние скидки!

Реклама. АНПОО "ХЕКСЛЕТ КОЛЛЕДЖ". ИНН 7839056670
Классы в pattern matching. Продолжение.

Функция print_person принимает параметр Person, который, как предполагается, представляет объект класса Person. И внутри функции конструкция match сравнивает значение параметра person с рядом шаблонов. Каждый шаблон представляет собой определение Person, где с каждым атрибутом сопоставляется некоторое значение. Например, первый шаблон строго определяет значения обоих атрибутов, смотрим:

Данный шаблон соответствует объекту Person, если у этого объекта атрибут name имеет значение "Tom", а атрибут age - значение 37.

Стоит отметить, что этот шаблон - это НЕ вызов конструктора Person. Шаблон просто устанавливает, как атрибуты сопоставляются со значениями.

🐍 Укус питона // 💬 Чат // #теория #pattern_matching #классы
Классы в pattern matching. Продолжение.

Второй шаблон строго задает значение только для атрибута age, первый пример:

Для соответствия этому шаблону атрибут age должен быть равен 37. А атрибут name может иметь произвольное значение. И это значение передается переменной name. А запись name=name расшифровывается как атрибут_объекта=переменная. А в вызове print(f"Name: {name}") на консоль выводится значение переменной name, которая получила значение атрибута name.

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

Третий шаблон соответствует объекту Person, у которого атрибут name равен строке "Tom". А значение атрибута age передается в переменную age, третья часть:

И в последнем шаблоне атрибуты name и age могут иметь произвольные значения. И эти значения передаются одноименным переменным, последняя часть:

🐍 Укус питона // 💬 Чат // #теория #pattern_matching #классы
Что выведет этот код?
Anonymous Quiz
8%
Jam
18%
dno
47%
maJ
26%
dnoB semaJ
Классы в pattern matching. Продолжение.

Также мы можем применить паттерн _, если нам надо обработать случаи, которые не соответствуют ни одному шаблону, смотрим код:

В данном случае второй шаблон Person(name=person_name) соответствует любому объекту Person, при этом значение атрибута name передается переменной person_name

А последний шаблон обрабатывает случаи, когда передано значение, которое не представляет объект Person.

🐍 Укус питона // 💬 Чат // #теория #pattern_matching #классы
Что выведет этот код?
Anonymous Quiz
83%
10, 11, 12, 13, 14,
17%
10, 11, 12, 13, 14, 15,
Передача набора значений.

Также с помощью вертикальной черты можно определить набор значений, которые должен иметь атрибут, смотрим код:

В данном случае первый шаблон соответствует объекту Person, у которого атрибут name имеет одно из трех значений: "Tom", "Tomas" или "Tommy".

🐍 Укус питона // 💬 Чат // #теория #pattern_matching #классы