0Pricing
Python Academy · Урок

Основы 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 — локальная установка не требуется.

Все уроки этого курса

  1. Класс Enum
  2. IntEnum и Flag
  3. Основы NamedTuple
  4. typing.NamedTuple
← Назад к Python Academy