Теория урока

37. Более подробно о кортежах в Python

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

Начнем с краткой исторической справки появления кортежей. Создатель языка Python (Гвидо ван Россум) математик по образованию. Вероятно, это распространенное понятие из математики перекочевало в Python. Всё, больше нечего добавить.

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

Пример
print("Hello", "World")

# равнозначный код
t = ("Hello", "World")
print(*t)

В этом примере мы использовали оператор распаковки (*), к нему вернемся позже, когда познакомимся с созданием функций в Python. Сейчас речь не о нем.

Инициализацию списка можно тоже считать кортежем:

Пример
l = [*("Hello", "World")]

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

Пример
t = "Hello", "World"
type(t) # => <class 'tuple'>

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

Пример
d = { (0, 1): 1, (-1, 0): 2 }

Кортежи – неизменяемая структура. Это означает, что элементы кортежа не могут быть изменены, но есть особенность. Только «первый уровень» элементов является неизменным. Например, создадим кортеж и попробуем изменить элемент:

Пример
t = (1, 2, [3, 4], 5)
t[2] = 6

В таком случае возникнет исключение TypeError. Об исключениях поговорим совсем скоро, в уроке 10.5.

Пример
Traceback (most recent call last):
File "C:/test.py", line 2, in <module>
t[2] = 6
TypeError: 'tuple' object does not support item assignment

Теперь попробуем изменить список, который находится в кортеже под индексом 2:

Пример
t = (1, 2, [3, 4], 5)
t[2][1] = 6
print(t) # => (1, 2, [3, 6], 5)

В результате, изменение прошло успешно. Это важный момент в понимании «неизменяемости» кортежа. Кортежи хранят ссылки на элементы (которые, в свою очередь, могут быть как изменяемые, так и не изменяемые).

Как вы вероятно догадались, кортежи не имеют многих методов списков, которые изменяют их, например, методов sort() и append(). Если вы помните, в уроке 6.5. мы говорили о функции sorted(), которая применима для всех итерируемых объектов, включая кортежи:

Пример
t = (3, 2, 6, 1, 4)
sorted(t) # => [1, 2, 3, 4, 6]

Обратите внимание, функция sorted() не изменяет текущий объект, а возвращает новый, в данном случае – список.

Срезы, о которых мы говорили в уроке 6.3. так же работают для кортежей:

Пример
t = (3, 2, 6, 1, 4)
t[1:3] # => (2, 6)

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

ПРОЧИТАНО
Следующий урок

Похожие уроки и записи блога

Типы данных в PythonЗнакомство с Python
Первое знакомство с PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Структуры данных в PythonЗнакомство с Python
Продолжаем написание классов в PythonЗнакомство с Python
Функциональное программирование: map, filter и reduceЗнакомство с Python
Конкатенация и сортировка списков в PythonЗнакомство с Python
Модули в PythonЗнакомство с Python
Аргументы и параметры функций, операторы * и ** в PythonЗнакомство с Python
<
×
>
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

Если что-то не нашли, то воспользуйтесь поиском по сайту, который находится на главной странице в самом верху.

Удачи в обучении!

Закрыть окно