Именованные кортежи

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

Тренажер по Python

Модуль 9: Именованные кортежи (Named Tuples)

В этом уроке мы изучим namedtuple из модуля collections. Именованные кортежи позволяют создавать типы данных, которые ведут себя как обычные кортежи (они неизменяемы и индексируемы), но также позволяют обращаться к элементам по понятным именам, как к атрибутам объекта. Это делает код более читаемым и самодокументируемым.

Вы научитесь:

  • Импортировать и создавать структуры namedtuple.
  • Создавать экземпляры именованных кортежей.
  • Обращаться к полям через точку (obj.field) и по индексу.
  • Понимать свойство неизменяемости (immutability).
  • Использовать специальные методы, такие как _replace и _asdict.

Будьте внимательны к синтаксису и отступам!

Список тем

1. Создание типа именованного кортежа

id: 40016_task_nt_1

Чтобы использовать именованные кортежи, сначала нужно импортировать функцию фабрику namedtuple. Затем создайте новый тип данных Point с полями 'x' и 'y'.

Заполните пропуски
from collections import input1S

# Создаем тип данных Point с полями x и y
Point = input2S('Point', ['x', 'input3S'])
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Создание экземпляра именованного кортежа

id: 40016_task_nt_2

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

Нужно правильно расставить в пропуски предложенные варианты
from collections import namedtuple

Person = namedtuple('Person', ['name', 'age', 'job'])

# Создайте сотрудника Alice, возраст 30, должность Engineer
employee = Person(input1S='Alice', input2S=30, input3S=input4S)
name
age
job
'Engineer'
Engineer
'name'
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Доступ к элементам

id: 40016_task_nt_3

Именованные кортежи поддерживают доступ как по имени атрибута, так и по индексу. Проанализируйте код и определите, что он выведет.

Выберите правильный вариант ответа
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)

res = p.x + p[1]
print(res)
Сообщения
Проверить
Показать подсказку

4. Ошибка изменяемости

id: 40016_task_nt_4

Этот код вызывает ошибку AttributeError, так как кортежи неизменяемы. Исправьте строку изменения координат, используя метод _replace(), чтобы создать новый объект с измененной координатой x, и присвойте его обратно в переменную pt.

Найдите ошибку и исправьте
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
pt = Point(5, 5)
pt.x = 10
print(pt)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Порядок действий

id: 40016_task_nt_5

Расставьте строки кода в правильном порядке, чтобы: импортировать модуль, создать тип Car, создать экземпляр машины и вывести её марку.

Расставьте строки в правильном порядке
print(my_car.brand)
from collections import namedtuple
my_car = Car(brand='Toyota', year=2020)
Car = namedtuple('Car', ['brand', 'year'])
Сообщения
Проверить
Показать подсказку

6. Специальные методы namedtuple

id: 40016_task_nt_6

У namedtuple есть специальные методы, начинающиеся с нижнего подчеркивания (чтобы не конфликтовать с именами полей). Сопоставьте методы с их описанием.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
Возвращает новый экземпляр кортежа, заменяя указанные поля
Возвращает новый словарь (dict), отображающий имена полей на их значения
Кортеж строк, содержащий имена полей
._replace()
._asdict()
._fields
Сообщения
Проверить
Показать подсказку

7. Вычисление площади прямоугольника

id: 40016_task_nt_7

Дан код, создающий прямоугольник. Рассчитайте, что выведет программа (площадь). Введите число.

Что должно получиться?
from collections import namedtuple

Rect = namedtuple('Rect', ['width', 'height'])
r = Rect(width=5, height=12)

area = r.width * r.height
print(area)
Сообщения
Проверить
Показать подсказку

8. Что можно, а что нельзя?

id: 40016_task_nt_8

Распределите операции над именованным кортежем p = Point(x=10, y=20) по двум категориям: "Допустимо" (код выполнится) и "Ошибка" (вызовет исключение).

Перетяните элементы в соответствующие блоки
Допустимо
Ошибка (Exception)
print(p.x)
p.y = 30
a, b = p
del p.x
len(p)
p.append(40)
Сообщения
Проверить
Показать подсказку

9. Преобразование в словарь

id: 40016_task_nt_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())
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Python: запуск кода в браузере

id: 40016_compiler
🐍
Запустить тренажёр (Python)
НайтиКурс.Ру