Обучение — Кортеж. Python


Кортежи в Python 3

Кортеж имеет такой вид:

coral = (‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)

Кортеж – это неизменяемый тип данных, который представляет собой упорядоченную последовательность элементов.

Кортежи позволяют группировать данные. Значения в кортеже называются элементами.

Все элементы кортежа берутся в круглые скобки () и разделяются запятыми. Пустой кортеж имеет такой вид:

Даже если в кортеже всего одно значение, нужно поставить запятую:

coral = (‘blue coral’,)

Если отобразить приведённый выше пример кортежа с помощью print(), на экране появится:

print(coral)
(‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)

Чтобы лучше представить себе кортеж Python (или другой коллекционный тип данных), полезно вспомнить те коллекции и совокупности данных, что есть на вашем компьютере: файлы, плейлисты, закладки браузера, переписку и т.п.

Кортежи похожи на списки, но, в отличие от последних, они неизменяемы, то есть их нельзя редактировать.

Используя кортеж в коде программы, вы можете сообщить о том, что та или иная последовательность данных не должна изменяться. Кортежи позволяют оптимизировать код, поскольку в Python они обрабатываются немного быстрее, чем списки.

Индексация кортежей

Каждый элемент в кортеже, как и в любой другой упорядоченной последовательности, можно вызвать по его индексу.

Каждому элементу присваивается уникальный индекс (целое число). Индексация начинается с 0.

Вернёмся к кортежу coral и посмотрим, как проиндексированы его элементы:

‘blue coral’ ‘staghorn coral’ ‘pillar coral’ ‘elkhorn coral’
1 2 3

Первый элемент (‘blue coral’) идёт под индексом 0, а последний (‘elkhorn coral’) – под индексом 3.

При помощи индекса можно вызвать каждый отдельный элемент кортежа. Например:

print(coral[2])
pillar coral

Диапазон индексов данного кортежа – 0-3. Таким образом, чтобы вызвать любой из элементов в отдельности, можно сослаться на индекс.

coral[0] = ‘blue coral’
coral[1] = ‘staghorn coral’
coral[2] = ‘pillar coral’
coral[3] = ‘elkhorn coral’

Если вызвать индекс вне диапазона данного кортежа (в данном случае это индекс больше 3), Python выдаст ошибку:

print(coral[22])
IndexError: tuple index out of range

Также в кортежах можно использовать отрицательные индексы; для этого подсчёт ведётся в обратном направлении с конца кортежа, начиная с -1. Отрицательная индексация особенно полезна, если вы хотите определить последний элемент в конце длинного кортежа.

Кортеж coral будет иметь такие отрицательные индексы:

‘blue coral’ ‘staghorn coral’ ‘pillar coral’ ‘elkhorn coral’
-4 -3 -2 -1


Чтобы запросить первый элемент, ‘blue coral’, по отрицательному индексу, нужно ввести:

print(coral[-4])
blue coral

Элементы кортежа можно склеивать со строками при помощи оператора +:

print(‘This reef is made up of ‘ + coral[1])
This reef is made up of staghorn coral

Также оператор + позволяет склеить два кортежа (больше информации об этом – дальше в статье).

Срез кортежа

Срез позволяет вызывать несколько значений кортежа в диапазоне [start:stop] (start – включительно, stop – исключительно).

К примеру, чтобы вызвать элементы кортежа с индексом 1 и 2, нужно ввести:

print(coral[1:3])
(‘staghorn coral’, ‘pillar coral’)

Как видите, первый элемент (1) включается в диапазон, а последний (3) исключается из него. Потому на экране появляются элементы 1 и 2.

Чтобы включить в срез начало или конец кортежа, можно опустить индекс первого или последнего её символа соответственно. К примеру, чтобы вывести только первые три элемента, можно ввести:

print(coral[:3])
(‘blue coral’, ‘staghorn coral’, ‘pillar coral’)

Чтобы вывести последние три элемента кортежа coral, нужно ввести:

print(coral[1:])
(‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)

В срезах можно использовать отрицательные индексы.

print(coral[-3:-1])
print(coral[-2:])
(‘staghorn coral’, ‘pillar coral’)
(‘pillar coral’, ‘elkhorn coral’)

Третий параметр среза – это шаг:

Этот параметр указывает, на сколько элементов нужно продвинуться после взятия первого элемента. По умолчанию шаг в Python равен 1, то есть, Python будет извлекать элементы по порядку.

Попробуйте создать большой кортеж и создать срез с шагом:

numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
print(numbers[1:11:2])
(1, 3, 5, 7, 9)

Конструкция numbers[1:11:2] выводит каждый второй элемент кортежа, начиная с индекса 1 (включительно) и заканчивая индексом 11 (исключительно).

0, 1 , 2, 3 , 4, 5 , 6, 7 , 8, 9 , 10, 11 , 12

Можно пропустить первые два параметра и использовать только шаг:

print(numbers[::3])
(0, 3, 6, 9, 12)

Теперь в срез войдёт каждый третий элемент кортежа, начиная с первого элемента:

, 1, 2, 3 , 4, 5, 6 , 7, 8, 9 , 10, 11, 12

Конкатенация и умножение кортежей

Выполнить конкатенацию или умножение кортежа можно с помощью различных операторов. Для конкатенации используется оператор +, а для умножения – оператор *.


Посмотрим, как работает оператор +, который позволяет склеить два или больше кортежей в новый кортеж.

coral = (‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)
kelp = (‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’)
coral_kelp = (coral + kelp)
print(coral_kelp)
(‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’, ‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’)

Оператор + объединяет кортежи и таким образом создаёт новый кортеж, однако он не может изменять существующие кортежи.

Оператор * позволяет умножать кортежи. Умножение используется, если, к примеру, вам нужно скопировать файлы в другой каталог или поделиться плейлистом с друзьями.

Попробуйте умножить кортеж coral на 2, а kelp – на 3. Присвойте полученный результат новым кортежам.

multiplied_coral = coral * 2
multiplied_kelp = kelp * 3
print(multiplied_coral)
print(multiplied_kelp)
(‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’, ‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)
(‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’, ‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’, ‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’)

Оператор * позволяет реплицировать кортеж указанное количество раз и создавать новые кортежи на основе исходных данных.

Функции кортежей

Python предоставляет несколько встроенных функций для работы с кортежами.

Функция len()

Функция len() позволяет вычислить длину кортежа (как и в случае со строками и списками).

Эта функция помогает обеспечить соблюдение минимальной или максимальной длины кортежа. Также она позволяет сравнивать последовательные данные.

Попробуйте вывести длину кортежей kelp и numbers:

print(len(kelp))
print(len(numbers))
4
13

В кортеже kelp 4 элемента:

kelp = (‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’)

А в numbers их 13.

numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

Функция len() очень полезна при работе с большими кортежами.

Функции max() и min()

При работе с кортежами, состоящими из числовых элементов (как целых, так и с плавающей точкой), функции max() и min() помогают найти самое высокое и самое низкое значение кортежа.

Эти функции полезны при работе с количественными данными (такими как результаты тестов, температура, цены и т.д.).

Рассмотрим кортеж из чисел с плавающей точкой:

more_numbers = (11.13, 34.87, 95.59, 82.49, 42.73, 11.12, 95.57)

Чтобы вывести на экран максимальное значение, нужно передать кортеж функции max(), а затем объединить её с print():

Аналогичным образом работает функция min():

Как и len(), функции max() и min() будут очень полезными при работе с большим количеством данных.


Чем кортежи отличаются от списков?

Первое отличие между кортежами и списками состоит в том, что кортежи являются неизменяемым типом данных. это значит, что в кортежах нельзя добавлять, изменять или удалять элементы, а в списках – можно.

Однако вы можете объединить два или больше кортежа в новый кортеж

Рассмотрим кортеж coral:

coral = (‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)

К примеру, вы хотите заменить элемент ‘blue coral’ новым элементом, ‘black coral’. Попробуйте изменить его так, как вы сделали бы это со списком:

coral[0] = ‘black coral’

Вы получите ошибку:

TypeError: ‘tuple’ object does not support item assignment

Если же вы создали кортеж и поняли, что на самом деле вам нужен список, вы можете преобразовать кортеж в список с помощью функции list():

Теперь coral – список, а не кортеж:

coral = [‘blue coral’, ‘staghorn coral’, ‘pillar coral’]

Обратите внимание на скобки: теперь они квадратные, а не круглые, а это значит, что кортеж преобразовался в список.

Чтобы преобразовать список в кортеж, используйте функцию tuple().

Заключение

Кортежи – это неизменяемый последовательный тип данных, с помощью которого можно оптимизировать код программы. При помощи кортежа также можно сообщить другим разработчикам команды, что тот или иной блок данных изменять не следует.

Теперь вы знакомы с основными функциями кортежей и умеете выполнять базовые операции с ними (например, конкатенацию, умножение, срезы и т.п.).

Кортежи в Python

Tuple — это коллекция объектов Python, разделенных запятыми. В некоторых случаях кортеж похож на список с точки зрения индексации, вложенных объектов и повторений, но кортеж неизменен в отличие от списков, которые являются изменяемыми.

Создание кортежей

ссылка на сайт
brightness_4
код

Примечание. Если вы генерируете кортеж с одним элементом, обязательно добавьте запятую после элемента.

Конкатенация кортежей

ссылка на сайт
brightness_4
код

Вложенность кортежей

ссылка на сайт
brightness_4
код

Повторение в кортежах

ссылка на сайт
brightness_4
код


Попробуйте выше без запятой и проверьте. Вы получите tuple3 в виде строки «pythonpythonpython».

Неизменные кортежи

ссылка на сайт
brightness_4
код

Нарезка в кортежах

ссылка на сайт
brightness_4
код

Удаление кортежа

ссылка на сайт
brightness_4
код

Найти длину кортежа

ссылка на сайт
brightness_4
код

Преобразование списка в кортеж

ссылка на сайт
brightness_4
код

Принимает один параметр, который может быть списком, строкой, набором или даже словарем (в качестве элементов принимаются только ключи) и преобразует их в кортеж.

Кортежи в петле

ссылка на сайт
brightness_4
код

Использование cmp (), max (), min ()

ссылка на сайт
brightness_4
код

Примечание: max () и min () проверяют на основе значений ASCII. Если в кортеже две строки, то проверяются первые разные символы в строках.

Эта статья предоставлена Шри Санкет Уппалапати. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Кортежи в Python 3

Кортеж имеет такой вид:

coral = (‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)

Кортеж – это неизменяемый тип данных, который представляет собой упорядоченную последовательность элементов.

Кортежи позволяют группировать данные. Значения в кортеже называются элементами.

Все элементы кортежа берутся в круглые скобки () и разделяются запятыми. Пустой кортеж имеет такой вид:

Даже если в кортеже всего одно значение, нужно поставить запятую:

coral = (‘blue coral’,)

Если отобразить приведённый выше пример кортежа с помощью print(), на экране появится:

print(coral)
(‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)


Чтобы лучше представить себе кортеж Python (или другой коллекционный тип данных), полезно вспомнить те коллекции и совокупности данных, что есть на вашем компьютере: файлы, плейлисты, закладки браузера, переписку и т.п.

Кортежи похожи на списки, но, в отличие от последних, они неизменяемы, то есть их нельзя редактировать.

Используя кортеж в коде программы, вы можете сообщить о том, что та или иная последовательность данных не должна изменяться. Кортежи позволяют оптимизировать код, поскольку в Python они обрабатываются немного быстрее, чем списки.

Индексация кортежей

Каждый элемент в кортеже, как и в любой другой упорядоченной последовательности, можно вызвать по его индексу.

Каждому элементу присваивается уникальный индекс (целое число). Индексация начинается с 0.

Вернёмся к кортежу coral и посмотрим, как проиндексированы его элементы:

‘blue coral’ ‘staghorn coral’ ‘pillar coral’ ‘elkhorn coral’
1 2 3

Первый элемент (‘blue coral’) идёт под индексом 0, а последний (‘elkhorn coral’) – под индексом 3.

При помощи индекса можно вызвать каждый отдельный элемент кортежа. Например:

print(coral[2])
pillar coral

Диапазон индексов данного кортежа – 0-3. Таким образом, чтобы вызвать любой из элементов в отдельности, можно сослаться на индекс.

coral[0] = ‘blue coral’
coral[1] = ‘staghorn coral’
coral[2] = ‘pillar coral’
coral[3] = ‘elkhorn coral’

Если вызвать индекс вне диапазона данного кортежа (в данном случае это индекс больше 3), Python выдаст ошибку:

print(coral[22])
IndexError: tuple index out of range

Также в кортежах можно использовать отрицательные индексы; для этого подсчёт ведётся в обратном направлении с конца кортежа, начиная с -1. Отрицательная индексация особенно полезна, если вы хотите определить последний элемент в конце длинного кортежа.

Кортеж coral будет иметь такие отрицательные индексы:

‘blue coral’ ‘staghorn coral’ ‘pillar coral’ ‘elkhorn coral’
-4 -3 -2 -1

Чтобы запросить первый элемент, ‘blue coral’, по отрицательному индексу, нужно ввести:

print(coral[-4])
blue coral

Элементы кортежа можно склеивать со строками при помощи оператора +:

print(‘This reef is made up of ‘ + coral[1])
This reef is made up of staghorn coral

Также оператор + позволяет склеить два кортежа (больше информации об этом – дальше в статье).

Срез кортежа

Срез позволяет вызывать несколько значений кортежа в диапазоне [start:stop] (start – включительно, stop – исключительно).

К примеру, чтобы вызвать элементы кортежа с индексом 1 и 2, нужно ввести:

print(coral[1:3])
(‘staghorn coral’, ‘pillar coral’)


Как видите, первый элемент (1) включается в диапазон, а последний (3) исключается из него. Потому на экране появляются элементы 1 и 2.

Чтобы включить в срез начало или конец кортежа, можно опустить индекс первого или последнего её символа соответственно. К примеру, чтобы вывести только первые три элемента, можно ввести:

print(coral[:3])
(‘blue coral’, ‘staghorn coral’, ‘pillar coral’)

Чтобы вывести последние три элемента кортежа coral, нужно ввести:

print(coral[1:])
(‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)

В срезах можно использовать отрицательные индексы.

print(coral[-3:-1])
print(coral[-2:])
(‘staghorn coral’, ‘pillar coral’)
(‘pillar coral’, ‘elkhorn coral’)

Третий параметр среза – это шаг:

Этот параметр указывает, на сколько элементов нужно продвинуться после взятия первого элемента. По умолчанию шаг в Python равен 1, то есть, Python будет извлекать элементы по порядку.

Попробуйте создать большой кортеж и создать срез с шагом:

numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
print(numbers[1:11:2])
(1, 3, 5, 7, 9)

Конструкция numbers[1:11:2] выводит каждый второй элемент кортежа, начиная с индекса 1 (включительно) и заканчивая индексом 11 (исключительно).

0, 1 , 2, 3 , 4, 5 , 6, 7 , 8, 9 , 10, 11 , 12

Можно пропустить первые два параметра и использовать только шаг:

print(numbers[::3])
(0, 3, 6, 9, 12)

Теперь в срез войдёт каждый третий элемент кортежа, начиная с первого элемента:

, 1, 2, 3 , 4, 5, 6 , 7, 8, 9 , 10, 11, 12

Конкатенация и умножение кортежей

Выполнить конкатенацию или умножение кортежа можно с помощью различных операторов. Для конкатенации используется оператор +, а для умножения – оператор *.

Посмотрим, как работает оператор +, который позволяет склеить два или больше кортежей в новый кортеж.

coral = (‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)
kelp = (‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’)
coral_kelp = (coral + kelp)
print(coral_kelp)
(‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’, ‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’)

Оператор + объединяет кортежи и таким образом создаёт новый кортеж, однако он не может изменять существующие кортежи.

Оператор * позволяет умножать кортежи. Умножение используется, если, к примеру, вам нужно скопировать файлы в другой каталог или поделиться плейлистом с друзьями.

Попробуйте умножить кортеж coral на 2, а kelp – на 3. Присвойте полученный результат новым кортежам.

multiplied_coral = coral * 2
multiplied_kelp = kelp * 3
print(multiplied_coral)
print(multiplied_kelp)
(‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’, ‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)
(‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’, ‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’, ‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’)

Оператор * позволяет реплицировать кортеж указанное количество раз и создавать новые кортежи на основе исходных данных.

Функции кортежей

Python предоставляет несколько встроенных функций для работы с кортежами.


Функция len()

Функция len() позволяет вычислить длину кортежа (как и в случае со строками и списками).

Эта функция помогает обеспечить соблюдение минимальной или максимальной длины кортежа. Также она позволяет сравнивать последовательные данные.

Попробуйте вывести длину кортежей kelp и numbers:

print(len(kelp))
print(len(numbers))
4
13

В кортеже kelp 4 элемента:

kelp = (‘wakame’, ‘alaria’, ‘deep-sea tangle’, ‘macrocystis’)

А в numbers их 13.

numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

Функция len() очень полезна при работе с большими кортежами.

Функции max() и min()

При работе с кортежами, состоящими из числовых элементов (как целых, так и с плавающей точкой), функции max() и min() помогают найти самое высокое и самое низкое значение кортежа.

Эти функции полезны при работе с количественными данными (такими как результаты тестов, температура, цены и т.д.).

Рассмотрим кортеж из чисел с плавающей точкой:

more_numbers = (11.13, 34.87, 95.59, 82.49, 42.73, 11.12, 95.57)

Чтобы вывести на экран максимальное значение, нужно передать кортеж функции max(), а затем объединить её с print():

Аналогичным образом работает функция min():

Как и len(), функции max() и min() будут очень полезными при работе с большим количеством данных.

Чем кортежи отличаются от списков?

Первое отличие между кортежами и списками состоит в том, что кортежи являются неизменяемым типом данных. это значит, что в кортежах нельзя добавлять, изменять или удалять элементы, а в списках – можно.

Однако вы можете объединить два или больше кортежа в новый кортеж

Рассмотрим кортеж coral:

coral = (‘blue coral’, ‘staghorn coral’, ‘pillar coral’, ‘elkhorn coral’)

К примеру, вы хотите заменить элемент ‘blue coral’ новым элементом, ‘black coral’. Попробуйте изменить его так, как вы сделали бы это со списком:

coral[0] = ‘black coral’

Вы получите ошибку:

TypeError: ‘tuple’ object does not support item assignment


Если же вы создали кортеж и поняли, что на самом деле вам нужен список, вы можете преобразовать кортеж в список с помощью функции list():

Теперь coral – список, а не кортеж:

coral = [‘blue coral’, ‘staghorn coral’, ‘pillar coral’]

Обратите внимание на скобки: теперь они квадратные, а не круглые, а это значит, что кортеж преобразовался в список.

Чтобы преобразовать список в кортеж, используйте функцию tuple().

Заключение

Кортежи – это неизменяемый последовательный тип данных, с помощью которого можно оптимизировать код программы. При помощи кортежа также можно сообщить другим разработчикам команды, что тот или иной блок данных изменять не следует.

Теперь вы знакомы с основными функциями кортежей и умеете выполнять базовые операции с ними (например, конкатенацию, умножение, срезы и т.п.).

Python. Кортеж здорового человека

Эта статья — об одном из лучших изобретений Python: именованном кортеже (namedtuple). Мы рассмотрим его приятные особенности, от известных до неочевидных. Уровень погружения в тему будет нарастать постепенно, так что, надеюсь, каждый найдёт для себя что-то интересное. Поехали!

Введение

Наверняка вы сталкивались с ситуацией, когда нужно передать несколько свойств объекта одним куском. Например, информацию о домашнем питомце: тип, кличка и возраст.

Часто создавать отдельный класс под это дело лень, и используют кортежи:

Для большей наглядности подойдёт именованный кортеж — collections.namedtuple :

Это все знают ツ А вот несколько менее известных особенностей:

Быстрое изменение полей

Что делать, если одно из свойств надо изменить? Френк стареет, а кортеж-то неизменяемый. Чтобы не пересоздавать его целиком, придумали метод _replace() :

А если хотите сделать всю структуру изменяемой — _asdict() :

Автоматическая замена названий

Допустим, вы импортируете данные из CSV и превращаете каждую строчку в кортеж. Названия полей взяли из заголовка CSV-файла. Но что-то идёт не так:

Решение — аргумент rename=True в конструкторе:

«Неудачные» названия переименовались в соответствии с порядковыми номерами.

Значения по умолчанию

Если у кортежа куча необязательных полей, всё равно приходится каждый раз перечислять их при создании объекта:

Чтобы этого избежать, укажите в конструкторе аргумент defaults :

defaults присваивает умолчательные значения с хвоста. Работает в питоне 3.7+

Для старых версий можно более коряво добиться того же результата через прототип:

Но с defaults , конечно, куда приятнее.


Необычайная лёгкость

Одно из преимуществ именованного кортежа — легковесность. Армия из ста тысяч голубей займёт всего 10 мегабайт:

Для сравнения, если Pet сделать обычным классом, аналогичный список займёт уже 19 мегабайт.

Так происходит, потому что обычные объекты в питоне таскают с собой увесистый дандер __dict__ , в котором лежат названия и значения всех атрибутов объекта:

Объекты-namedtuple же лишены этого словаря, а потому занимают меньше памяти:

Но как именованному кортежу удалось избавиться от __dict__ ? Читайте дальше ツ

Богатый внутренний мир

Если вы давно работаете с питоном, то наверняка знаете: легковесный объект можно создать через дандер __slots__ :

У «слотовых» объектов нет словаря с атрибутами, поэтому они занимают мало памяти. «Френк на слотах» такой же лёгкий, как «Френк на кортеже», смотрите:

Если вы решили, что namedtuple тоже использует слоты — это недалеко от истины. Как вы помните, конкретные классы-кортежи объявляются динамически:

Конструктор namedtuple применяет разную тёмную магию и генерит примерно такой класс (сильно упрощаю):

То есть наш Pet — это обычный tuple , к которому гвоздями приколотили три метода-свойства:

  • type возвращает нулевой элемент кортежа
  • name — первый элемент кортежа
  • age — второй элемент кортежа

А __slots__ нужен только для того, чтобы объекты получились лёгкими. В результате Pet и занимает мало места, и может использоваться как обычный кортеж:

Хитро придумано, а?

Не уступает дата-классам

Раз уж мы заговорили о генерации кода. В питоне 3.7 появился убер-генератор кода, которому нет равных — дата-классы (dataclasses).

Когда впервые видишь дата-класс, хочется перейти на новую версию языка только ради него:

Чудо как хорош! Но есть нюанс — он толстый:

Дата-класс генерит обычный питонячий класс, объекты которого изнемогают под тяжестью __dict__ . Так что если вы начитываете из базы вагон строк и превращаете их в объекты, дата-классы — не лучший выбор.

Но постойте, дата-класс ведь можно «заморозить», как кортеж. Может тогда он станет легче?

Увы. Даже замороженный, он остался обычным увесистым объектом со словарём атрибутов. Так что если вам нужны лёгкие неизменяемые объекты (которые к тому же можно использовать как обычные кортежи) — namedtuple по-прежнему лучший выбор.

Мне очень нравится именованный кортеж:

  • честный iterable,
  • динамическое объявление типов,
  • именованный доступ к атрибутам,
  • лёгкий и неизменяемый.

И при этом реализован в 150 строк кода. Что ещё надо для счастья ツ

Если хотите узнать больше о стандартной библиотеке Python — подписывайтесь на канал @ohmypy

Цукерберг рекомендует:  Bootstrap - Курс Bootstrap
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих