Python для новичковКоллекцииКортеж и распаковка

Кортеж и распаковка

Уроки курсаКортеж и распаковка

Распаковка кортежа в переменные

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

person = ('Анна', 25, 'Москва')
name, age, city = person
print(name)  # Анна
print(age)   # 25
print(city)  # Москва

Python берёт элементы кортежа слева направо и присваивает каждый из них соответствующей переменной слева от =. Первый элемент уходит в name, второй — в age, третий — в city. Всё происходит за одно выражение.

То же самое работает, если кортеж создан прямо в строке распаковки:

x, y = (3, 7)
print(x)  # 3
print(y)  # 7

После распаковки x и y — обычные переменные. Можно использовать их в любых выражениях: складывать, передавать в функции, выводить.

Условие корректности: число переменных должно совпадать с числом элементов.

Если переменных больше или меньше, Python выбросит ValueError:

a, b = (1, 2, 3)  # слишком много значений
ValueError: too many values to unpack (expected 2)
a, b, c = (1, 2)  # слишком мало значений
ValueError: not enough values to unpack (expected 3, got 2)

Ошибка возникает потому, что Python не знает, куда деть лишнее значение или откуда взять недостающее.

В большинстве случаев это не проблема: если вы сами создали кортеж, вы уже знаете его длину и просто пишете нужное число переменных слева. Распаковка хорошо работает именно с кортежами, потому что их содержимое фиксировано — заранее известно, сколько элементов и что они означают.

ValueError чаще всего возникает из-за опечатки: написали две переменные вместо трёх, или перепутали порядок. Если такая ошибка появилась, достаточно пересчитать элементы кортежа и скорректировать список переменных слева.