Wyjaśnienie lekcji
Pod koniec tej lekcji będziesz potrafić:
(number, record) podczas iteracji.W Pythonie rozpakowywanie (unpacking) przypisuje elementy sekwencji do kilku zmiennych jednocześnie:
service, region = ("api", "eu")Liczba celów musi odpowiadać liczbie elementów, chyba że jeden z celów ma gwiazdkę. Gwiazdka zbiera pozostałe elementy do listy:
first, *middle, last = [2, 4, 6, 8]Tutaj middle to [4, 6]. Może też być puste, gdy dane wejściowe zawierają tylko dwa elementy. W jednym przypisaniu z rozpakowywaniem dozwolony jest tylko jeden cel z gwiazdką.
Przypisanie wielokrotne ułatwia też zamianę: a, b = b, a oblicza prawą stronę przed przypisaniem nazw.
Rozpakowywanie działa naturalnie z pętlami for: for name, score in pairs: nadaje sensowne nazwy obu częściom każdej pary. Parę możesz też rozpakować wewnątrz enumerate(), używając for number, (name, score) in enumerate(pairs, start=1):. Dobrze pasuje to wtedy, gdy sam rekord zawiera kilka pól, a potrzebna jest także jego pozycja.
host, port = ("db.internal", 5432)
print(f"Connect: {host}:{port}")Wynik:
Connect: db.internal:5432Dwa elementy krotki są przypisane do dwóch nazw, w kolejności.
front = "blue"
back = "orange"
front, back = back, front
print(f"Front: {front}, back: {back}")Wynik:
Front: orange, back: blueObie stare wartości są zapamiętane, zanim którakolwiek nazwa się zmieni.
measurements = [10, 12, 14, 16, 20]
first, *middle, last = measurements
print(first)
print(middle)
print(last)Wynik:
10
[12, 14, 16]
20Cel z gwiazdką zawsze otrzymuje listę, nawet gdy nie ma wartości.
checks = [("lint", True), ("tests", False)]
for number, (name, passed) in enumerate(checks, start=1):
print(f"{number}. {name}: {passed}")Wynik:
1. lint: True
2. tests: FalseZewnętrzna para zawiera (number, record); wewnętrzna rozbija rekord na (name, passed).
| Cel | Python |
|---|---|
| Rozpakowanie dwóch wpisów | left, right = pair |
| Zamiana nazw | left, right = right, left |
| Przechwycenie wpisów środkowych | first, *middle, last = values |
| Rozpakowanie każdej pary | for key, value in pairs: |
| Numerowanie i rozpakowywanie par | for n, (key, value) in enumerate(pairs, 1): |
ValueError.enumerate(pairs) zwraca (index, pair), a nie trzy oddzielne wartości.