все Python 3Циклыконструкция
Распаковка в for
цикл for
При итерации по последовательности кортежей (или других итерируемых) можно сразу распаковывать элементы в несколько переменных прямо в заголовке for.
Синтаксис
for x, y in iterable: ...
for a, b, c in iterable: ...
Число переменных в заголовке должно точно совпадать с числом элементов в каждом кортеже — иначе на этой итерации вылетит ValueError (not enough / too many values to unpack), причём уже в рантайме, а не при разборе кода. Если длина «хвоста» плавает, выручает звёздочка: for first, *rest in ... соберёт остаток в список. А вложенная распаковка вроде for i, (x, y) in enumerate(...) требует скобок вокруг внутренней пары — без них Python будет ждать три отдельные переменные.
Примеры
for x, y in [(1, 2), (3, 4), (5, 6)]:
print(x + y, end=" ") # → 3 7 11
pairs = {"a": 1, "b": 2, "c": 3}
for k, v in pairs.items():
print(f"{k}={v}", end=" ") # → a=1 b=2 c=3
for i, (x, y) in enumerate([(1, 2), (3, 4)]):
print(i, x, y) # → 0 1 2 / 1 3 4
for a, *rest in [(1, 2, 3), (4, 5, 6)]:
print(a, rest) # → 1 [2, 3] / 4 [5, 6]
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности