Podstawy NamedTuple
Twórz lekkie, niezmienne rekordy
Podstawy NamedTuple to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.
Czym jest NamedTuple?
Nazwana krotka to krotka, której pozycje mają również nazwy. Otrzymuje się w ten sposób lekką i niemutowalną strukturę krotki oraz czytelny dostęp za pomocą atrybutów. Jest idealna dla małych rekordów.
Problem ze zwykłymi krotkami
Zwykłe krotki są oparte na pozycjach, więc trzeba pamiętać, co oznacza każdy indeks. Kod taki jak p[0] i p[1] łatwo napisać niepoprawnie.
point = (1, 2)
print(point[0]) # x?
print(point[1]) # y?Tworzenie za pomocą namedtuple
Fabryka collections.namedtuple tworzy nową podklasę krotki. Należy przekazać nazwę typu oraz nazwy pól.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p)Dostęp według nazwy
Od tej pory można odczytywać pola według nazw zamiast indeksów, dzięki czemu kod staje się zrozumiały bez dodatkowych wyjaśnień.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x)
print(p.y)To wciąż krotka
Nazwana krotka nadal jest prawdziwą krotką, więc indeksowanie, rozpakowywanie i iterowanie działają jak zwykle.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p[0])
x, y = p
print(x, y)Niemutowalność
Podobnie jak wszystkie krotki, nazwane krotki są niemutowalne. Próba przypisania wartości do pola powoduje zgłoszenie AttributeError.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
try:
p.x = 99
except AttributeError as e:
print('Cannot modify:', e)Tworzenie zmodyfikowanej kopii
Ponieważ nie można jej modyfikować, należy użyć metody _replace(), aby utworzyć nową instancję ze zmienionymi wybranymi polami.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
q = p._replace(y=99)
print(p)
print(q)Konwertowanie na słownik
Metoda _asdict() zwraca pola jako słownik, co jest przydatne podczas serializacji lub rejestrowania informacji.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p._asdict())Sprawdzanie pól
Atrybut _fields zawiera nazwy pól. Jest przydatny w uniwersalnym kodzie, który iteruje po polach rekordu.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
print(Point._fields)Wartości domyślne
Wartości domyślne należy przekazać za pomocą argumentu defaults. Wartości domyślne dotyczą pól znajdujących się najbardziej na prawo, podobnie jak wartości domyślne parametrów funkcji.
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y', 'z'], defaults=[0])
print(Point(1, 2))
print(Point(1, 2, 9))Zwracanie wielu wartości
Nazwane krotki świetnie sprawdzają się jako wartości zwracane przez funkcje. Zamiast zwracać anonimową krotkę, należy zwrócić nazwaną, aby odbiorcy mogli odczytywać pola według nazw.
from collections import namedtuple
Stats = namedtuple('Stats', ['minimum', 'maximum'])
def analyze(nums):
return Stats(min(nums), max(nums))
r = analyze([3, 1, 9, 4])
print(r.minimum, r.maximum)Szybkie sprawdzenie
Jak utworzyć zmodyfikowaną kopię instancji nazwanej krotki?
Podsumowanie
Nauczyli się Państwo tworzyć lekkie, niemutowalne rekordy.
namedtupledodaje nazwy pól do krotek.- Pola można odczytywać według nazwy lub indeksu, a rozpakowywanie nadal działa.
- Do tworzenia zmodyfikowanych kopii służy
_replace(), a do konwersji —_asdict(). _fieldszawiera nazwy, adefaultsustawia wartości domyślne.
Często zadawane pytania
Czy lekcja „Podstawy NamedTuple” jest bezpłatna?
Tak — pełny tekst „Podstawy NamedTuple” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Podstawy NamedTuple”?
Twórz lekkie, niezmienne rekordy Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Python Academy?
Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Podstawy NamedTuple”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?
Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Klasa Enum
- IntEnum i Flag
- Podstawy NamedTuple
- typing.NamedTuple