Что такое именованные кортежи в Python?

Именованные кортежи в Python — это очень простая, но интересная функция, которая может облегчить жизнь разработчику. Они являются частью модуля collections и действуют очень похоже на обычные кортежи, с той лишь разницей, что к значениям, хранящимся в именованном кортеже, можно обращаться не по индексам, а по именам полей.

Например, точка в двумерной плоскости может быть представлена с помощью двух координат. В обычном кортеже доступ к этим значениям осуществляется по индексу ([0] и [1]), но если мы определим именованный кортеж, Point, мы сможем обращаться к ним, используя x и y (хотя при желании мы можем использовать и индексы):

from collections import namedtuple

# Regular tuple
p = (2, 4) # p[0] = 2, p[1] = 4

# Named tuple
Point = namedtuple('Point', 'x y')
q = Point(3, 5) # q.x = 3, q.y = 5
Войти в полноэкранный режим Выход из полноэкранного режима

Помимо повышения удобочитаемости вашего кода, именованные кортежи обеспечивают еще несколько улучшений качества жизни. Прежде всего, они позволяют задавать значения по умолчанию через аргумент итерабельной переменной defaults. Во-вторых, они имеют возможность автоматически переименовывать дублирующиеся или недействительные поля с помощью булевого аргумента rename. И, наконец, они даже предоставляют удобную возможность задавать имена полей в виде списка или строки, разделенной запятыми/пробелами.

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y', 'z'], defaults = [1]);
a = Point(1, 1, 0); # a.x = 1, a.y = 1, a.z = 0

# Default value used for `z`
b = Point(2, 2); # b.x = 2, b.y = 2, b.z = 1 (default)
Вход в полноэкранный режим Выход из полноэкранного режима

Где же подвох? спросите вы. Похоже, что его нет! Очевидная параллель со словарями в плане синтаксиса, похоже, не проходит дальше, так как экземпляры именованных кортежей не имеют словарей на экземпляр, а это значит, что они требуют столько же памяти, сколько и обычные кортежи.


Вам нравятся короткие, качественные фрагменты кода и статьи? Мы тоже! Посетите сайт 30 seconds of code, чтобы найти больше статей, подобных этой, или следите за нами в Twitter, чтобы получать ежедневные фрагменты JavaScript, React и Python! 👨💻

Оцените статью
devanswers.ru
Добавить комментарий