Ce face collections.namedtuple()
namedtuple creează o clasă nouă, ale cărei obiecte sunt tupluri cu nume pentru fiecare poziție: p.x în loc de p[0]. Codul devine mai ușor de citit, iar obiectele rămân imutabile și ocupă la fel de puțină memorie ca tuplurile.
Metode utile: _asdict() (dicționar), _replace(camp=valoare) (copie cu un câmp schimbat), _fields (numele câmpurilor), _make(iterabil) (creare dintr-o listă). Cu defaults dai valori implicite ultimelor câmpuri. Pentru clase de date modificabile, vezi dataclasses sau typing.NamedTuple.
Parametri
| Parametru | Descriere |
|---|---|
typename |
Numele noului tip. |
field_names |
Lista numelor de câmpuri sau un text cu ele separate prin spații/virgule. |
defaults |
Opțional. Valorile implicite pentru ultimele câmpuri. |
rename |
Opțional. Redenumește automat câmpurile invalide. |
Ce returnează
O clasă nouă, subclasă a lui tuple.
Exemple
Exemplul 1: Un produs cu câmpuri numite
from collections import namedtuple
Produs = namedtuple("Produs", "nume pret stoc", defaults=[0])
p = Produs("Cafea", 32.9)
print(p)
print(p.nume, p[1], p.stoc)
print(p._asdict())
p2 = p._replace(stoc=10)
print(p2, Produs._fields)
Rezultat
Produs(nume='Cafea', pret=32.9, stoc=0)
Cafea 32.9 0
{'nume': 'Cafea', 'pret': 32.9, 'stoc': 0}
Produs(nume='Cafea', pret=32.9, stoc=10) ('nume', 'pret', 'stoc')
Exemplul 2: Din rânduri de date
from collections import namedtuple
Oras = namedtuple("Oras", ["nume", "judet", "populatie"])
randuri = [("Iași", "IS", 271692), ("Cluj-Napoca", "CJ", 286598)]
orase = [Oras._make(r) for r in randuri]
cel_mai_mare = max(orase, key=lambda o: o.populatie)
print(cel_mai_mare.nume, cel_mai_mare.judet)
Rezultat
Cluj-Napoca CJ
Greșeli frecvente
- Încerci să schimbi un câmp:
p.pret = 40dăAttributeError: can't set attribute. Foloseștep._replace(pret=40).
Comenzi înrudite
tuple (tupluri): Tuplul este o colecție ordonată care nu mai poate fi modificată după creare.class: Definește o clasă: un șablon pentru obiecte care au date (atribute) și comportament (metode).dict (dicționare): Dicționarul păstrează perechi cheie: valoare și găsește rapid valoarea după cheie.