Кортеж и распаковка
Уроки курсаКортеж и распаковка
Распаковка кортежа в переменные
Когда в кортеже лежит несколько значений, можно достать их все одной строкой — без индексов и циклов. Это называется распаковкой.
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 чаще всего возникает из-за опечатки: написали две переменные вместо трёх, или перепутали порядок. Если такая ошибка появилась, достаточно пересчитать элементы кортежа и скорректировать список переменных слева.
