2.8. Кортежі¶
Кортеж — це незмінна, впорядкована послідовність значень. Після створення елементи всередині не можна додавати, видаляти чи змінювати.
2.8.1. Створення кортежів¶
Для створення кортежу використовуйте дужки (або просто коми):
empty = ()
point = (3, 4)
triple = 1, 2, 3 # parentheses are optional
mixed = (1, "two", 3.14)
nested = ((1, 2), (3, 4))
2.8.1.1. Особливість одноелементного кортежу¶
Дужки навколо значення — це просто дужки; саме кома робить кортеж. Одноелементний кортеж потребує замикаючої коми:
>>> (1)
1 # just an int in parens
>>> (1,)
(1,) # a one-element tuple
>>> type((1)), type((1,))
(<class 'int'>, <class 'tuple'>)
2.8.2. Довжина, індексування та зрізи¶
Те саме, що й для списків і рядків — len(), індексування, зрізи, in і + / * — все працює однаково:
>>> point = (3, 4, 5)
>>> len(point)
3
>>> point[0]
3
>>> point[1:]
(4, 5)
>>> 4 in point
True
>>> (1, 2) + (3, 4)
(1, 2, 3, 4)
2.8.3. Незмінність¶
Кортежі не мають append, pop, sort чи будь-яких інших методів, що змінюють об’єкт на місці. Присвоєння за індексом викидає TypeError:
>>> point = (3, 4)
>>> point[0] = 99
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item assignment
Щоб «змінити» кортеж, створіть новий із зміненими значеннями.
2.8.4. Розпаковування¶
Головна перевага кортежу — розпаковування: присвоєння кожного елемента окремій змінній в одному виразі.
Розпаковування прив’язує кожен елемент кортежу до окремої змінної в одному присвоєнні.¶
>>> point = (3, 4)
>>> x, y = point
>>> x
3
>>> y
4
Права частина може бути будь-яким ітерованим об’єктом — список, рядок, значення, повернуте функцією:
>>> a, b, c = "abc"
>>> a, b, c
('a', 'b', 'c')
Зірочка на початку * збирає «решту» розпаковування в список:
>>> first, *rest = [10, 20, 30, 40]
>>> first
10
>>> rest
[20, 30, 40]
2.8.5. Кілька значень, що повертаються¶
Функція може повернути кортеж для передачі кількох значень одразу; тоді виклик розпаковує їх під час отримання:
def size_of(rect):
return (rect[2] - rect[0], rect[3] - rect[1])
width, height = size_of((10, 20, 110, 140))
# width = 100, height = 120
Дужки навколо return є необов’язковими — голе return a, b також є кортежем.
2.8.6. Кортеж vs список¶
Практичний посібник для вибору між ними:
Кортеж для даних фіксованої форми, часто різнорідних: точки
(x, y), кольори(r, g, b), кілька значень, що повертаються, аргументи функцій, запаковані для подальшого використання.Список для даних змінної довжини, часто однорідних: список вимірювань, черга елементів для обробки, все те, до чого ви очікуєте додавати елементи.
Кортежі також є хешованими (за умови, що кожен елемент всередині є хешованим), тому їх можна використовувати як ключі в dict.