6 Разрушающее задание

В присваиваниях вы можете разбить Iterable на значения, используя синтаксис «распаковка»:

Разрушение как ценности

 a, b = (1, 2)
print(a)
# Prints: 1
print(b)
# Prints: 2

 

Если вы попытаетесь распаковать больше длины итерируемой, вы получите ошибку:

 a, b, c = [1]
# Raises: ValueError: not enough values to unpack (expected 3, got 1)

 

Разрушение в виде списка

Вы можете распаковать список неизвестной длины, используя следующий синтаксис:

 head, *tail = [1, 2, 3, 4, 5]

 

Здесь мы извлекаем первое значение как скаляр, а остальные значения как список:

 print(head)
# Prints: 1
print(tail)
# Prints: [2, 3, 4, 5]

 

Что эквивалентно:

 l = [1, 2, 3, 4, 5]
head = l[0]
tail = l[1:]

 

Он также работает с несколькими элементами или элементами в конце списка:

 a, b, *other, z = [1, 2, 3, 4, 5]
print(a, b, z, other)
# Prints: 1 2 5 [3, 4]

 

Игнорирование значений в деструктурирующих заданиях

Если вы заинтересованы только в данном значении, можно использовать _ , чтобы указать , что вы не заинтересованы. Примечание: это будет еще множество _ , просто большинство людей не используют его в качестве переменной.

 a, _ = [1, 2]
print(a)
# Prints: 1
a, _, c = (1, 2, 3)
print(a)
# Prints: 1
print(c)
# Prints: 3

 
## Игнорирование списков в деструктурирующих присваиваниях Наконец, вы можете игнорировать многие значения, используя синтаксис `* _` в присваивании: a, * _ = [1, 2, 3, 4, 5] print (a) # Prints: 1 не очень интересно, так как вместо этого вы можете использовать индексирование в списке. Хорошо, когда первое и последнее значения сохраняются в одном присваивании: a, * _, b = [1, 2, 3, 4, 5] print (a, b) # Печатает: 1 5 или извлекает несколько значений одновременно : a, _, b, _, c, * _ = [1, 2, 3, 4, 5, 6] print (a, b, c) # Печать: 1 3 5