lettura facile

Le tuple con nome in Python

Nel linguaggio Python le tuple con nome (named tuple) sono tuple autodescrittive in cui ogni elemento ha un nome oltre che un valore.

Cosa sono le tuple con nome?  Immagina le tuple con nome come una versione evoluta delle tuple normali. Sono molto utili per rendere il codice più leggibile e mantenere i tuoi dati organizzati.  Una tupla è una sequenza immutabile di valori, che significa che non puoi modificarla una volta creata. Puoi accedere ai suoi elementi tramite gli indici numerici, come tupla[0] o tupla[1].

tupla[0]

Ma, diciamocelo, a volte è difficile ricordare cosa rappresenta ogni indice. Qui entrano in gioco le tuple con nome. Le named tuple sono come tuple in cui ogni elemento ha un nome. Ad esempio, puoi accedere a un elemento digitando tupla.nome o tupla.anno Questo rende il tuo codice molto più chiaro e facile da leggere.

tupla.nome

Puoi realizzarle tramite la classe namedtuple del modulo collections.

A cosa servono le named tuple?

Le namedtuple ti aiutano a scrivere più pulito e comprensibile.

Sono particolarmente utili quando devi lavorare con molti dati e vuoi mantenere il tuo codice organizzato e leggibile per te e per altri che leggono il tuo codice.

Come creare una tupla con nome

Prima di tutto, dobbiamo importare la classe namedtuple dal modulo collections.

from collections import namedtuple

Dopo, definiamo la nostra namedtuple.

Di fatto una namedtuple è simile a definire una classe, ma molto più semplice.

Persona = namedtuple('Persona', ['nome', 'età'])

In questo esempio, abbiamo creato una nuova namedtuple chiamata "Persona" che ha due campi: "nome" e "età".

In alternativa, puoi anche definire i campi della namedtuple con un'unica stringa separati tra loro da uno spazio o da una virgola, anziché con una tupla.

Persona = namedtuple('Persona', 'nome età')

Il risultato finale è lo stesso

Ora creiamo un'istanza della namedtuple "Persona".

persona1 = Persona(nome="Alessandro", età=30)

Abbiamo appena creato una "Persona" di nome Alessandro che ha 30 anni.

In questo modo è più facile accedere agli elementi, basta ricordarsi il nome del campo anziché l'indice.

La lista dei campi della tupla

Per vedere la lista dei campi della namedtuple puoi usare la proprietà __fields

print(persona1._fields)

('nome', 'età')

L'accesso agli elementi 

In una namedtupla l'accesso agli elementi si basa sul nome degli elementi della tupla anziché sugli indici.

Ad esempio, puoi visualizzare il nome dell'istanza persona1 scrivendo questo codice:

print(persona1.nome) 

Alessandro

Allo stesso modo puoi accedere all'età indicando il nome del campo "età".

print(persona1.età)  

30

È molto più intuitivo rispetto a ricordare indici numerici, vero?

Immutabilità. Come le tuple normali, anche le namedtuple sono immutabili. Quindi, non puoi cambiare i loro valori una volta che sono stati impostati. Questo aiuta a prevenire errori causati da modifiche non intenzionali ai dati. Tuttavia, puoi creare una nuova tupla modificando i dati di una vecchia tupla tramite il metodo __replace(). Ne parliamo più avanti in questa pagina.

Un esempio pratico

Ad esempio, immagina di dover rappresentare un punto in uno spazio 2D:

Punto = namedtuple('Punto', ['x', 'y'])
p = Punto(11, y=22)
print(p.x, p.y) 

11
22

Oppure, se stai lavorando con dati di un veicolo:

Auto = namedtuple('Auto', 'marca modello anno colore')
mia_auto = Auto('Fiat', '500', 2015, 'blu')
print(mia_auto.marca)  

Fiat

Il metodo _replace()

Sebbene le namedtuple siano immutabili, puoi ancora "modificarle" creandone di nuove con i dati aggiornati.

Python fornisce un apposito metodo per questo scopo, si tratta del metodo _replace()

persona2 = persona1._replace(età=31)
print(persona2.età) 

31

Nota che la tupla persona1 rimane inalterata.

print(persona2.età)

30

Il metodo _asdict()

Il metodo _asdict() ti permette di convertire una namedtuple in un dizionario ordinato (OrderedDict).

from collections import namedtuple
Persona = namedtuple('Persone', ['nome', 'età'])
persona1 = Persona(nome="Alessandro", età=30)
print(persona1._asdict())

{'nome': 'Alessandro', 'età': 30}

La concatenazione tra una namedtuple e una tupla

In Python puoi anche concatenare una namedtuple con una tupla.

In questo caso, il risultato sarà sempre una tupla

from collections import namedtuple
Persona = namedtuple('Persone', ['nome', 'età'])
persona1 = Persona(nome="Alessandro", età=30)
tupla=(1,2)
print(persona1+tupla)

('Alessandro', 30, 1, 2)

Spero che questa guida ti sia stata utile per comprendere meglio le namedtuple in Python!




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin