Python Glossary English

все Python 3Кортежи (tuple)понятие

Распаковка кортежа

распаковка

Распаковка позволяет присвоить элементы переменным. * захватывает остаток. _ — соглашение для игнорируемых значений.

Синтаксис

a, b = t  |  a, *rest = t  |  a, _, b = t

Ошибка почти всегда одна: слева не столько имён, сколько элементов справа — ValueError: not enough values to unpack. Звёздочка от этого спасает, но *rest всегда становится списком, даже если распаковывали кортеж, и звёздочка в присваивании допустима только одна. Само _ — обычная переменная: значение в неё реально кладётся, просто по соглашению его потом не читают.

Примеры

a, b, c = (1, 2, 3)
print(a, b, c)
# → 1 2 3
x, y = (10, 20)
x, y = y, x
print(x, y)
# → 20 10 (swap)
first, *rest = (1, 2, 3, 4, 5)
print(first, rest)
# → 1 [2, 3, 4, 5]
*head, last = (1, 2, 3, 4, 5)
print(head, last)
# → [1, 2, 3, 4] 5
a, _, c = (1, 999, 3)
print(a, c)
# → 1 3 (_ игнорируется)
point = (3, 4)
import math
dist = math.sqrt(sum(v**2 for v in point))
print(dist)
# → 5.0
(a, b), c = (1, 2), 3
print(a, b, c)
# → 1 2 3 (вложенная распаковка)
for a, b in [(1, 2), (3, 4)]:
    print(a + b)
    # → 3 / 7

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности