Модуль 9: Именованные кортежи (Named Tuples)
В этом уроке мы изучим namedtuple из модуля collections. Именованные кортежи позволяют создавать типы данных, которые ведут себя как обычные кортежи (они неизменяемы и индексируемы), но также позволяют обращаться к элементам по понятным именам, как к атрибутам объекта. Это делает код более читаемым и самодокументируемым.
Вы научитесь:
- Импортировать и создавать структуры
namedtuple. - Создавать экземпляры именованных кортежей.
- Обращаться к полям через точку (
obj.field) и по индексу. - Понимать свойство неизменяемости (immutability).
- Использовать специальные методы, такие как
_replaceи_asdict.
Будьте внимательны к синтаксису и отступам!
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Создание кортежей.
- Неизменяемость кортежей.
- Распаковка кортежей.
- Именованные кортежи.
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
1. Создание типа именованного кортежа
Чтобы использовать именованные кортежи, сначала нужно импортировать функцию фабрику namedtuple. Затем создайте новый тип данных Point с полями 'x' и 'y'.
from collections import input1S
# Создаем тип данных Point с полями x и y
Point = input2S('Point', ['x', 'input3S'])2. Создание экземпляра именованного кортежа
Используя подготовленные токены, создайте экземпляр класса Person. Обратите внимание, что значения можно передавать как позиционно, так и по именам аргументов. В данном случае используйте именованные аргументы для ясности.
from collections import namedtuple
Person = namedtuple('Person', ['name', 'age', 'job'])
# Создайте сотрудника Alice, возраст 30, должность Engineer
employee = Person(input1S='Alice', input2S=30, input3S=input4S)3. Доступ к элементам
Именованные кортежи поддерживают доступ как по имени атрибута, так и по индексу. Проанализируйте код и определите, что он выведет.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
res = p.x + p[1]
print(res)4. Ошибка изменяемости
Этот код вызывает ошибку AttributeError, так как кортежи неизменяемы. Исправьте строку изменения координат, используя метод _replace(), чтобы создать новый объект с измененной координатой x, и присвойте его обратно в переменную pt.
from collections import namedtuplePoint = namedtuple('Point', ['x', 'y'])pt = Point(5, 5)pt.x = 10print(pt)5. Порядок действий
Расставьте строки кода в правильном порядке, чтобы: импортировать модуль, создать тип Car, создать экземпляр машины и вывести её марку.
print(my_car.brand)from collections import namedtuplemy_car = Car(brand='Toyota', year=2020)Car = namedtuple('Car', ['brand', 'year'])6. Специальные методы namedtuple
У namedtuple есть специальные методы, начинающиеся с нижнего подчеркивания (чтобы не конфликтовать с именами полей). Сопоставьте методы с их описанием.
._replace()._asdict()._fields7. Вычисление площади прямоугольника
Дан код, создающий прямоугольник. Рассчитайте, что выведет программа (площадь). Введите число.
from collections import namedtuple
Rect = namedtuple('Rect', ['width', 'height'])
r = Rect(width=5, height=12)
area = r.width * r.height
print(area)8. Что можно, а что нельзя?
Распределите операции над именованным кортежем p = Point(x=10, y=20) по двум категориям: "Допустимо" (код выполнится) и "Ошибка" (вызовет исключение).
print(p.x)p.y = 30a, b = pdel p.xlen(p)p.append(40)9. Преобразование в словарь
Соберите код, который создает именованный кортеж, а затем преобразует его в обычный словарь Python и выводит ключи словаря. Остерегайтесь ложных вариантов с неправильным синтаксисом.
Config = namedtuple('Config', ['host', 'port'])conf = Config(host='localhost', port=8080)conf_dict = conf._asdict()print(conf_dict.keys())conf_dict = conf.to_dict()print(conf.keys())