Основы NamedTuple
Создавайте лёгкие неизменяемые записи
«Основы NamedTuple» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Что такое NamedTuple
Именованный кортеж — это кортеж, позиции которого также имеют имена. Вы получаете лёгкую и неизменяемую структуру кортежа и одновременно понятный доступ к атрибутам. Это идеальный вариант для небольших записей.
Проблема обычных кортежей
Обычные кортежи используют позиции, поэтому нужно помнить, что означает каждый индекс. В коде вроде p[0] и p[1] легко ошибиться.
point = (1, 2)
print(point[0]) # x?
print(point[1]) # y?Создание с помощью namedtuple
Фабрика collections.namedtuple создаёт новый подкласс кортежа. Передайте ей имя типа и имена полей.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p)Доступ по имени
Теперь можно читать поля по имени, а не по индексу, поэтому код становится понятным без дополнительных пояснений.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x)
print(p.y)Всё ещё кортеж
Именованный кортеж по-прежнему является настоящим кортежем, поэтому индексирование, распаковка и перебор работают как обычно.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p[0])
x, y = p
print(x, y)Неизменяемость
Как и все кортежи, именованные кортежи неизменяемы. Попытка присвоить значение полю вызывает AttributeError.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
try:
p.x = 99
except AttributeError as e:
print('Cannot modify:', e)Создание изменённой копии
Поскольку изменить объект нельзя, используйте метод _replace(), чтобы создать новый экземпляр с изменёнными полями.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
q = p._replace(y=99)
print(p)
print(q)Преобразование в словарь
Метод _asdict() возвращает поля в виде словаря, что удобно для сериализации или журналирования.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p._asdict())Изучение полей
Атрибут _fields перечисляет имена полей. Это удобно для универсального кода, который перебирает поля записи.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
print(Point._fields)Значения по умолчанию
Укажите значения по умолчанию с помощью аргумента defaults. Значения применяются к самым правым полям, как и значения по умолчанию у параметров функций.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y', 'z'], defaults=[0])
print(Point(1, 2))
print(Point(1, 2, 9))Возврат нескольких значений
Именованные кортежи особенно удобны в качестве возвращаемых значений функций. Вместо безымянного кортежа возвращайте именованный, чтобы вызывающий код обращался к полям по имени.
from collections import namedtuple
Stats = namedtuple('Stats', ['minimum', 'maximum'])
def analyze(nums):
return Stats(min(nums), max(nums))
r = analyze([3, 1, 9, 4])
print(r.minimum, r.maximum)Быстрая проверка
Как создать изменённую копию экземпляра именованного кортежа?
Повторение
Вы научились создавать лёгкие неизменяемые записи.
namedtupleдобавляет кортежам имена полей.- К полям можно обращаться по имени или по индексу; распаковка по-прежнему работает.
- Используйте
_replace()для создания изменённых копий, а_asdict()— для преобразования. _fieldsперечисляет имена, аdefaultsзадаёт значения по умолчанию.
Часто задаваемые вопросы
Урок «Основы NamedTuple» бесплатный?
Да — полный текст урока «Основы NamedTuple» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Основы NamedTuple»?
Создавайте лёгкие неизменяемые записи Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Основы NamedTuple»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Класс Enum
- IntEnum и Flag
- Основы NamedTuple
- typing.NamedTuple