Уроки модуля (2/4)
Кортежи и распаковка
Кортеж — это упорядоченная и неизменяемая последовательность: после создания вы можете больше не меняйте его элементы. Пишется в скобках (хотя на самом деле это определяет запятая).
Создание кортежа
vuota = ()
una = (42,) # ATTENZIONE: senza virgola, (42) è solo 42 fra parentesi
coords = (10, 20)
mista = ("Ada", 36, True)Доступ по индексу и нарезка работают точно так же, как и для списков: coords[0],
coords[-1], mista[:2].
Когда использовать кортеж вместо списка
– Если значение представляет собой фиксированную коллекцию, которая не должна меняться.
(координаты, дата (year, month, day), версия (1, 2, 3)).
- Когда вам нужно использовать значение как ключ словаря или как элемент
a
set: можно использовать только неизменяемые (хэшируемые) объекты. - Когда вы хотите сообщить читателю кода, что это значение «замороженный».
Распаковка: функция, которая меняет способ написания Python
nome, anni = ("Ada", 36)
nome # 'Ada'
anni # 36Это также работает без круглых скобок (это запятая, которая определяет кортеж):
x, y = 10, 20И это позволяет обмен без временной переменной, чистый Python идиома:
a, b = 1, 2
a, b = b, a
a, b # (2, 1)Распаковка с помощью * (остальное)
Если вы хотите запечатлеть «первое и остальное» или «первое, последнее, середина»:
primo, *resto = [1, 2, 3, 4, 5]
primo # 1
resto # [2, 3, 4, 5]
primo, *centro, ultimo = [1, 2, 3, 4, 5]
centro # [2, 3, 4]Это называется помеченное задание: звезда собирает все, что остается в списке.
Ловушка одноэлементного кортежа
(42) — это не кортеж, это число 42 в круглых скобках. Чтобы сделать
одноэлементный кортеж, вам нужна запятая: (42,). Без него любая операция
терпит неудачу в запутанном виде.
x = (42)
type(x) # <class 'int'>
x = (42,)
type(x) # <class 'tuple'>Одноэлементные кортежи
Чтобы создать кортеж, содержащий только один элемент, одних круглых скобок недостаточно: необходимо вставить завершающую запятую, например t = (42,). Без запятой Python рассматривает круглые скобки как простую математическую группировку, создавая простое целое число 42.
Попробуйте это
Учитывая `a = 1` и `b = 2`, поменяйте их значения в одной строке (распаковка кортежа) и вычислите кортеж (a, b).
Показать подсказку
а, б = б, а
Решение доступно после 3 попыток
Обзор упражнения
Из списка `voti = [7, 5, 8, 6, 9]` распаковкой извлеките первый сорт в `primo`, последний в `ultimo` и оставшиеся в `centro`. Оцените `(primo, centro, ultimo)`.
Показать подсказку
primo, *centro, ultimo = воти → primo=7, centro=[5,8,6], ultimo=9.
Решение доступно после 3 попыток
Дополнительная задача
Given the tuple `point = (4, 5, 6)`, use unpacking to assign the three values to the variables `x`, `y`, `z` respectively. Then, calculate the sum of `x`, `y`, and `z` and store it in `coord_sum`. Finally, evaluate `coord_sum`.
Показать подсказку
Используйте x, y, z = point, чтобы извлечь три координаты в одном операторе.
Решение доступно после 3 попыток