Объяснение к уроку
К концу этого урока ты сможешь:
(number, record) при итерации.В Python распаковка присваивает элементы из последовательности нескольким переменным одновременно:
service, region = ("api", "eu")Количество целевых переменных должно совпадать с количеством элементов, если только одна из переменных не помечена звездочкой. Звездочка собирает оставшиеся элементы в список:
first, *middle, last = [2, 4, 6, 8]Здесь middle равно [4, 6]. Оно также может быть пустым, если во входных данных всего два элемента. В одном присваивании с распаковкой разрешена только одна переменная со звездочкой.
Множественное присваивание также делает простым обмен значениями: выражение a, b = b, a сначала вычисляет правую часть, а затем присваивает имена.
Распаковка естественно сочетается с циклами for: конструкция for name, score in pairs: дает понятные имена двум частям каждой пары. Ты также можешь распаковать пару внутри enumerate(), используя for number, (name, score) in enumerate(pairs, start=1):. Это отлично подходит, когда сама запись содержит несколько полей, но тебе также нужна ее позиция.
host, port = ("db.internal", 5432)
print(f"Connect: {host}:{port}")Вывод:
Connect: db.internal:5432Два элемента кортежа присваиваются двум именам по порядку.
front = "blue"
back = "orange"
front, back = back, front
print(f"Front: {front}, back: {back}")Вывод:
Front: orange, back: blueОба старых значения фиксируются до того, как изменится любое из имен.
measurements = [10, 12, 14, 16, 20]
first, *middle, last = measurements
print(first)
print(middle)
print(last)Вывод:
10
[12, 14, 16]
20Целевая переменная со звездочкой всегда получает список, даже если в ней нет значений.
checks = [("lint", True), ("tests", False)]
for number, (name, passed) in enumerate(checks, start=1):
print(f"{number}. {name}: {passed}")Вывод:
1. lint: True
2. tests: FalseВнешняя пара содержит (number, record); внутренняя пара разделяет запись на (name, passed).
| Цель | Python |
|---|---|
| Распаковать две записи | left, right = pair |
| Поменять имена местами | left, right = right, left |
| Извлечь средние записи | first, *middle, last = values |
| Распаковать каждую пару | for key, value in pairs: |
| Пронумеровать и распаковать пары | for n, (key, value) in enumerate(pairs, 1): |
ValueError.enumerate(pairs) возвращает (index, pair), а не три отдельных значения.