На этом шаге мы рассмотрим особенности распаковки.
У вас есть кортеж из N элементов или последовательность, которую вы хотите распаковать в коллекцию из N переменных.
Любая последовательность (или итерируемый объект) может быть распакована в переменные с помощью простого присваивания. Единственное обязательное условие заключается в том, чтобы количество и структура переменных совпадали с таковыми у последовательности. Например:
>>> p = (4, 5) >>> x, y = p >>> x 4 >>> y 5 >>> >>> data = ['ACME', 50, 91.1, (2012, 12, 21)] >>> name, shares, price, date = data >>> name 'ACME' >>> date (2012, 12, 21) >>> >>> name, shares, price, (year, mon, day) = data >>> name 'ACME' >>> year 2012 >>> mon 12 >>> day 21 >>>
При несовпадении количества элементов вы получите ошибку. Например:
>>> p = (4, 5)
>>> x, y, z = p
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
x, y, z = p
ValueError: not enough values to unpack (expected 3, got 2)
>>>
Распаковка работает с любым итерируемым объектом, а не только с кортежами и списками. Это строки, файлы, итераторы и генераторы. Например:
>>> s = 'Hello' >>> a, b, c, d, e = s >>> a 'H' >>> b 'e' >>> e 'o' >>>
При распаковке вы иногда можете захотеть отбраковать некоторые значения. Специального синтаксиса для этого в Python нет, но вы можете назначить переменные, которые потом отбросите. Например:
>>> data = ['ACME', 50, 91.1, (2012, 12, 21)] >>> _, shares, price, _ = data >>> price 91.1 >>>
Но убедитесь, что вы уже не использовали где-то эту переменную.
На следующем шаге мы рассмотрим распаковку элементов из последовательности произвольной длины.