На этом шаге мы кратко охарактеризуем кортежи.
Python поставляется со специализированным контейнерным типом namedtuple, то есть именованным кортежем. И этот тип, по всей видимости, не привлекает того внимания, которое он заслуживает. Именованный кортеж представляет собой одно из тех удивительных функциональных средств языка Python, которое спрятано у всех на виду.
Именованные кортежи могут быть отличной альтернативой определению класса вручную, и у них есть некоторые другие интересные свойства, с которыми мы хотим вас познакомить в следующих шагах.
Итак, что же такое именованный кортеж и в чем проявляется его исключительность? Именованные кортежи лучше всего представить как расширение встроенного типа данных tuple.
Кортежи Python - это простая структура данных, предназначенная для группирования произвольных объектов. Кроме того, кортежи не могут изменяться - после их создания их нельзя изменять. Ниже приведен короткий пример:
>>> tup = ('привет', object(), 42) >>> tup ('привет', <object object at 0x000001A44A0ECC20>, 42) >>> tup[2] 42 >>> tup[2] = 23 Traceback (most recent call last): . . . tup[2] = 23 TypeError: 'tuple' object does not support item assignment
Оборотной стороной простых кортежей является то, что данные, которые вы в них храните, могут быть извлечены только адресацией посредством целочисленных индексов. Вы не можете назначать имена отдельным свойствам, хранящимся в кортеже. А это может повлиять на удобочитаемость программного кода.
Кроме того, кортеж всегда является вспомогательной структурой. Трудно гарантировать, что у двух кортежей будет одно и то же количество полей и одинаковые хранящиеся в них свойства. В результате появляется возможность беспрепятственно вносить ошибки "по недоразумению", просто перепутав порядок следования полей.
На следующем шаге мы поговорим о назначении именованных кортежей.