Что такое именованные кортежи (namedtuple) в Python
Именованные кортежи (namedtuple) — это расширение стандартных кортежей (tuples) в языке Python, предоставляемое модулем collections. Благодаря им можно обращаться к элементам не только по индексу, как в обычных кортежах, но и по именам полей. Так вы улучшаете код, делая его читабельным при работе с такими данными, как координаты или списки людей.
Чтобы создать именованный кортеж, необходимо импортировать функцию namedtuple из модуля collections и передать ей имя нового типа и список полей.
from collections import namedtuple # Создание типа кортежа Point с полями x и y Point = namedtuple('Point', ['x', 'y']) # Создание экземпляра Point p = Point(100, 200)
После создания объекта такого кортежа вы можете обратиться к полям по наименованию, примерно также, как к атрибутам:
print(p.x) # Вывод: 100 print(p.y) # Вывод: 200
Так как именованные кортежи основаны на стандартных кортежах, это обеспечивает доступность к элементам по индексу:
print(p[0]) # Вывод: 100 print(p[1]) # Вывод: 200
Именованные кортежи поддерживают распаковку, как стандартные кортежи:
x, y = p print(x) # Вывод: 100 print(y) # Вывод: 200
Этот тип кортежей также имеет встроенные методы, что делает их весьма полезными для разработчиков:
data = [30, 40] p2 = Point._make(data) print(p2) # Выведет: Point(x=30, y=40)
print(p._asdict()) # Выведет: {'x': 10, 'y': 20}
p3 = p._replace(x=50) print(p3) # Выведет: Point(x=50, y=20)
print(Point._fields) # Выведет: ('x', 'y')
Предположим, нам нужно обработать информацию о погоде в Нью-Йорке. Благодаря навыкам работы с именованными кортежами это можно сделать следующим образом:
from collections import namedtuple # Именованный кортеж для хранения данных о погоде Weather = namedtuple('Weather', ['city', 'temperature', 'condition']) # Создаем несколько записей weather_today = Weather(city="New York", temperature=25, condition="Sunny") weather_yesterday = Weather(city="New York", temperature=22, condition="Cloudy") # Доступ к полям print(f"Сегодня в {weather_today.city} температура {weather_today.temperature}°C и {weather_today.condition}.") # Выведет: Сегодня в New York температура 25°C и Sunny. # Сравнение данных if weather_today.temperature > weather_yesterday.temperature: print("Сегодня теплее, чем вчера.") else: print("Сегодня холоднее, чем вчера.")
Вот еще один пример. Здесь мы работаем с банковскими счетами.
from collections import namedtuple # Именованный кортеж для банковского счета BankAccount = namedtuple('BankAccount', ['account_number', 'holder_name', 'balance']) # Создаем несколько счетов account1 = BankAccount('123456', 'John Doe', 1500.0) account2 = BankAccount('654321', 'Jane Doe', 2500.0) # Доступ к данным счета print(f"Владелец счета {account1.account_number}: {account1.holder_name}, баланс: ${account1.balance}") # Выведет: Владелец счета 123456: John Doe, баланс: $1500.0 # Проверка баланса и замена if account1.balance < 2000: updated_account1 = account1._replace(balance=2000.0) print(f"Баланс обновлен: ${updated_account1.balance}") # Выведет: Баланс обновлен: $2000.0
Именованные кортежи могут очень пригодиться, когда вам нужно хранить небольшие неизменяемые структуры данных с фиксированным набором атрибутов. Также они нередко применяются для представления записей из баз данных, чтения данных из файлов, обработки результатов вычислений и других задач, где необходимо сочетание продуктивности, простоты доступа к данным и читабельности кода.
С другой стороны, существуют ситуации, когда такие кортежи неуместны. От работы с именованными кортежами лучше отказаться:
Как видите, именованные кортежи в Python — это удобный способ обработки структур данных, имеющий интуитивно понятный доступ к элементам по их наименованиям. Они полезны для простых неизменяемых структур данных, таких как точки, координаты или записи с фиксированными атрибутами. Но если требуется изменяемость, сложная логика, динамическая структура, методы, наследование или контроль за данными, то тогда разработчику лучше использовать иные структуры: например, классы или словарь.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…