Co to jest namedtuple w Pythonie?

Python to popularny język programowania, który oferuje wiele wbudowanych typów danych, w tym krotki (ang. tuples). Choć krotki są przydatne w wielu sytuacjach, to ich elementy pozostają zwykle dostępne tylko poprzez indeksy. Wywoływanie krotek przez indeksowanie może być niewygodne, a niekiedy prowadzi do błędów w kodzie. Dlatego pracę z kodem mogą znacznie ułatwić krotki z nazwanym polem (ang. namedtuple). Sprawdźmy zatem, czym dokładnie są namedtuple.<b></b>
https://cms.pracuj.pl/content/uploads/2023/10/pankaj-patel-u2Ru4QBXA5Q-unsplash-2-1024x683.jpg


W tym artykule

  • Namedtuple w Pythonie to specjalny typ krotki, który zwiększa czytelność kodu i ułatwia dostęp do wartości.
  • Krotki z nazwanym polem mają specjalne atrybuty i metody, a one ułatwiają pracę z nimi.
  • Namedtuple to pomocne narzędzie. Sprawdzi się, gdy potrzebujesz przechować dane z ustaloną strukturą i mają ważne znaczenie w kontekście Twojego kodu.
  • Namedtuple w Pythonie to rozwinięcie standardowych krotek. Są one jednak intuicyjne i czytelniejsze w użyciu niż zwykła krotka.

Spis treści

  1. Co to jest namedtuple w Pythonie?
  2. Definicja Namedtuple Python
  3. Jak utworzyć namedtuple?
  4. Przykład użycia namedtuple
  5. Atrybuty namedtuple
  6. Przykład wykorzystania atrybutów dla namedtuple
  7. Jakie korzyści przynosi stosowanie namedtuple w Python?
  8. Gdzie zastosować namedtuple?
  9. Jaka jest różnica między namedtuple a standardową krotką?
  10. Przykład porównania namedtuple i zwykłej krotki:
  11. Podsumowanie

Definicja Namedtuple Python

Namedtuple w języku Python to specjalna klasa struktury danych, która pozwala tworzyć krotki z nazwanymi polami. Namedtuple dostępne są w module collections. Jednak w odróżnieniu od zwykłej krotki, do pola namedtuple można odwoływać się po nazwie, a nie tylko przy pomocy indeksów. To sprawia, że elementy namedtuple są bardziej zrozumiałe i łatwiejsze do odczytania.

Jak utworzyć namedtuple?

Tworzenie namedtuple jest proste i przypomina tworzenie klas. Po zdefiniowaniu nazwy i listy pól tworzy się instancje namedtuple, podając wartości dla poszczególnych pól. Nazwane pola namedtuple pozwalają również na utrzymanie rozmiaru krotki, ponieważ każde pole ma przypisaną stałą nazwę i wartość, co zapobiega przypadkowym zmianom w indeksowaniu.

Przykład użycia namedtuple

from collections import namedtuple

Osoba = namedtuple('Osoba', ['imie', 'nazwisko', 'wiek'])

moja_osoba = Osoba('Jan', 'Kowalski', 35)

print(moja_osoba.imie) # Jan

print(moja_osoba.nazwisko) # Kowalski

print(moja_osoba.wiek) # 35


W tym przykładzie utworzono klasę Osoba z trzema polami: imię, nazwisko i wiek. Następnie utworzono instancję tej klasy z wartościami 'Jan', 'Kowalski' i 25. Aby uzyskać dostęp do wartości poszczególnych elementów, można użyć nazw lub indeksowania.

# uzyskanie wartości za pomocą nazw

print(moja_osoba.imie)      # 'Jan'

print(moja_osoba.nazwisko)  # 'Kowalski'

print(moja_osoba.wiek)      # 35

 

# uzyskanie wartości za pomocą indeksowania

print(moja_osoba[0])  # 'Jan'

print(moja_osoba[1])  # 'Kowalski'

print(moja_osoba[2])  # 35

Warto zauważyć, że uzyskanie wartości za pomocą nazw jest czytelne i intuicyjne, szczególnie gdy krotka nazwana ma wiele elementów.

Atrybuty namedtuple

Namedtuple dziedziczą właściwości po zwykłej krotce. Jednak namedtuple mają dodatkowe funkcje i specyficzne dla siebie atrybuty, które ułatwiają z nimi pracę, takie jak:

  • _fields: zwraca krotkę z nazwami pól,
  • _field_defaults: sprawdza wartość pola,
  • _asdict: pozwala konwertować instancje namedtuple na słowniki,
  • _replace: umożliwia zamianę pola w istniejących instancjach namedtuple,
  • _make: tworzy nowy namedtuple z sekwencji lub iterowalnego obiektu.

Przykład wykorzystania atrybutów dla namedtuple

  • atrybut "_replace" dla krotki nazwanej "moja_osoba":

moja_osoba = moja_osoba._replace(wiek=40)

print(moja_osoba)  # Osoba(imie='Jan', nazwisko='Kowalski', wiek=40)

  • atrybut "_asdict" dla krotki nazwanej "moja_osoba":

slownik_osoby = moja_osoba._asdict()

print(slownik_osoby)

W efekcie powyższego kodu, na ekranie pojawi się następujący słownik:

{'imie': 'Jan', 'nazwisko': 'Kowalski', 'wiek': 35}

Jakie korzyści przynosi stosowanie namedtuple w Python?

Ze względu na swoją niezmienność namedtuple zużywają mniej pamięci niż słowniki. W praktyce oznacza to tyle, że namedtuple zapewniają łatwe i intuicyjne przechowywanie danych, które mają kilka pól i zachowują się jak rekordy lub struktury danych.


Oto kilka głównych zalet używania namedtuple w Pythonie:

  • Bezpieczeństwo  - namedtuple są niemodyfikowalne, co oznacza, że ich wartości nie mogą zostać przypadkowo zmienione podczas działania programu. Namedtuples są także szybsze i bezpieczniejsze niż listy, ponieważ chronią dane przed niepożądanymi zmianami.
  • Używanie nazw w namedtuple zwiększa czytelność kodu i zmniejsza ryzyko błędów spowodowanych pomyłką w indeksach.
  • Funkcjonalność - wbudowane w moduł dodatkowe atrybuty ułatwiają pracę z namedtuples. Ponadto korzystanie z nich jest bardziej wydajne pod względem pamięci.
  • Ustawiając wartości domyślne, użytkownik unika konieczności ustawiania wartości każdego atrybutu przy każdym tworzeniu instancji. To przyśpiesza także proces pisania kodu.

Gdzie zastosować namedtuple?

Namedtuple w Pythonie są przydatnym narzędziem do tworzenia prostych klas danych bez pisania dużej ilości kodu. Mogą być używane do reprezentowania obiektów takich jak punkty, współrzędne, rekordy lub inne struktury danych z nazwanymi polami. Jednak namedtuple nie będą odpowiednie do tworzenia klas z metodami lub zachowaniami, ponieważ są niezmienne i nie można ich podklasyfikować.

Jaka jest różnica między namedtuple a standardową krotką?

W przypadku namedtuple, pola obiektu są nazwane, co poprawia czytelność kodu. Dostęp do pól jest również bardziej intuicyjny, ponieważ używa się ich nazw zamiast indeksów. Oprócz tego namedtuple działają tak samo jak zwykła krotka. Można ich używać wszędzie tam, gdzie używa się zwykłej krotki. Namedtuple są indeksowalne i niejednorodne, a poza tym mają możliwość łatwej konwersji na słowniki. W niektórych przypadkach to może uczynić kodowanie znacznie prostszym.

Przykład porównania namedtuple i zwykłej krotki:

from collections import namedtuple


Definiowanie Namedtuple

Osoba = namedtuple('Osoba', ['imie', 'wiek'])

Tworzenie instancji Namedtuple

osoba = Osoba('Jan',25)

 

Dostęp do wartości za pomocą notacji kropkowej

print(osoba.imie) # 'Jan'

print(osoba.wiek) # 25

 

Tworzenie zwykłej krotki

osoba = ('Anna', 21)

Dostęp do wartości za pomocą indeksów

print(osoba[0]) # 'Anna'

print(osoba[1]) # 21

Podsumowanie

Zrozumienie działania namedtuple w Pythonie może znacznie poprawić czytelność kodu, pozwala uniknąć błędów oraz zapewnia elastyczność danych. Mimo że tworzenie definicji krotki nazwanej wymaga dodatkowego kodu, używanie namedtuples nie niesie ze sobą żadnych wad w porównaniu ze zwykłymi krotkami. Ponadto namedtuple nie zużywają więcej pamięci niż zwykłe krotki Pythona, więc można śmiało korzystać z namedtuples nawet w projektach, w których wydajność i zużycie pamięci są kluczowe. 

the:protocol © 2026 Grupa Pracuj S.A.