Tuple in Python: unpacking, assegnazioni multiple e casi d’uso pratici

by theArchitect
SHARE
Tuple in Python: unpacking, assegnazioni multiple e casi d’uso pratici
© Guida-HTML5.it

Introduzione

Le tuple sono una delle strutture dati fondamentali di Python. A prima vista possono sembrare simili alle liste, ma in realtà sono pensate per scenari diversi: quando vuoi raggruppare valori che appartengono insieme e che, idealmente, non devono cambiare durante l’esecuzione del programma.

In questo tutorial ci concentriamo su un sotto-argomento molto pratico e spesso sottovalutato: l’unpacking delle tuple, cioè la possibilità di assegnare in modo elegante i singoli elementi di una tupla a più variabili. Vedremo anche come sfruttarlo in funzioni, nel ritorno di più valori e in situazioni reali di sviluppo.

Questo approccio è utile perché rende il codice più leggibile, più idiomatico e spesso più semplice da mantenere rispetto a soluzioni basate su indici come valore[0], valore[1], ecc.

Codice completo

# Esempio completo: unpacking di tuple in scenari reali

# 1) Creiamo una tupla con dati di un utente
utente = ("Luca", "Bianchi", 29)

# Unpacking semplice: ogni elemento va in una variabile
nome, cognome, eta = utente

print("Nome:", nome)
print("Cognome:", cognome)
print("Età:", eta)

# 2) Unpacking con valori ignorati usando _
# Supponiamo di voler usare solo il nome e l´età
nome, _, eta = utente

print("nSolo dati utili:")
print("Nome:", nome)
print("Età:", eta)

# 3) Funzione che ritorna una tupla
def analizza_testo(testo):
    parole = testo.split()
    numero_parole = len(parole)
    numero_caratteri = len(testo)
    return numero_parole, numero_caratteri

risultato = analizza_testo("Python è un linguaggio molto espressivo")

# Unpacking del valore restituito dalla funzione
parole, caratteri = risultato

print("nAnalisi testo:")
print("Parole:", parole)
print("Caratteri:", caratteri)

# 4) Unpacking direttamente nel punto di chiamata
parole2, caratteri2 = analizza_testo("Le tuple semplificano il codice")

print("nAnalisi testo 2:")
print("Parole:", parole2)
print("Caratteri:", caratteri2)

# 5) Swap di variabili senza variabile temporanea
a = 10
b = 20

a, b = b, a

print("nDopo lo scambio:")
print("a:", a)
print("b:", b)

# 6) Unpacking con numero variabile di elementi (*resto)
dati = ("ordine-1042", "spedito", "2026-04-07", "priorità alta", "corriere espresso")

ordine_id, stato, data, *extra = dati

print("nDati ordine:")
print("ID ordine:", ordine_id)
print("Stato:", stato)
print("Data:", data)
print("Extra:", extra)

# 7) Uso in un ciclo
studenti = [
    ("Anna", 28),
    ("Marco", 31),
    ("Giulia", 26)
]

print("nElenco studenti:")
for nome, eta in studenti:
    print(f"{nome} ha {eta} anni")

# 8) Tuple annidate e unpacking
punto = (3, (10, 20))

x, (y, z) = punto

print("nTuple annidata:")
print("x:", x)
print("y:", y)
print("z:", z)

Spiegazione

L’idea centrale è semplice: una tupla può contenere più valori, e Python permette di “spacchettarli” direttamente in più variabili. Questo si chiama tuple unpacking.

1. Unpacking base

Se hai una tupla come ("Luca", "Bianchi", 29), puoi scrivere:

nome, cognome, eta = utente

In questo modo Python assegna il primo elemento a nome, il secondo a cognome e il terzo a eta. Questo è molto più leggibile rispetto a:

nome = utente[0]
cognome = utente[1]
eta = utente[2]

Il vantaggio non è solo estetico: il codice comunica subito che quei tre valori sono un gruppo coerente.

2. Ignorare valori non necessari

Talvolta una tupla contiene più dati di quelli che ti servono. In questi casi si usa convenzionalmente _ per indicare un valore ignorato.

Per esempio, se ti interessa solo nome ed età, puoi scrivere:

nome, _, eta = utente

Questo rende esplicito che il secondo elemento non verrà usato. È una pratica molto comune in Python.

3. Restituire più valori da una funzione

In Python una funzione può restituire più valori separati da virgole. In realtà, Python li impacchetta in una tupla. Questo è uno dei casi d’uso più importanti delle tuple.

Nel tutorial, la funzione analizza_testo restituisce due informazioni:

  • numero di parole
  • numero di caratteri

Quando chiami la funzione, puoi assegnare direttamente i risultati a due variabili:

parole, caratteri = analizza_testo("Python è un linguaggio molto espressivo")

Questa tecnica evita di dover creare strutture più complesse quando non servono.

4. Swap di variabili

Uno dei vantaggi più noti dell’unpacking è lo scambio di due variabili senza variabile temporanea:

a, b = b, a

Questo funziona perché Python valuta prima la tupla di destra e poi effettua l’assegnazione. È una soluzione pulita, elegante e molto usata.

5. Unpacking con un numero variabile di elementi

Quando non sai quanti elementi “extra” ci saranno, puoi usare *resto. Nell’esempio:

ordine_id, stato, data, *extra = dati

i primi tre elementi vengono assegnati alle prime tre variabili, mentre tutti gli altri finiscono nella lista extra.

Questo è utile quando hai dati semi-strutturati, ad esempio record provenienti da file, log o API.

6. Unpacking nei cicli

Se hai una lista di tuple, puoi iterare direttamente sui contenuti senza usare indici:

for nome, eta in studenti:
    print(f"{nome} ha {eta} anni")

Questo è uno degli usi più pratici delle tuple, perché rende il codice molto più leggibile e riduce gli errori di accesso ai dati.

7. Tuple annidate

Le tuple possono contenere anche altre tuple. In questi casi puoi fare unpacking annidato:

x, (y, z) = punto

È utile quando i dati sono gerarchici, per esempio coordinate, dimensioni o valori composti.

Best practice

  • Usa l’unpacking quando i dati hanno un significato chiaro: è perfetto per record piccoli e coerenti, come coordinate, utenti, risultati di funzioni.
  • Evita tuple troppo grandi: se un raggruppamento contiene molti campi, spesso è meglio usare una classe, un dataclass o un dizionario.
  • Non abusare degli indici: accedere a [0], [1] e simili rende il codice meno leggibile e più fragile.
  • Usa _ per i valori ignorati: è una convenzione chiara e riconoscibile da chi legge il codice.
  • Controlla sempre il numero di elementi: l’unpacking fallisce con ValueError se il numero di variabili non coincide con quello degli elementi disponibili, salvo l’uso di *resto.
  • Preferisci tuple per dati immutabili: se il contenuto non deve essere modificato, la tupla comunica meglio l’intenzione rispetto a una lista.

Riepilogo

Le tuple sono una struttura dati molto utile in Python, e il loro vero punto di forza emerge quando le usi con l’unpacking. Questa tecnica ti permette di assegnare i valori in modo diretto, elegante e leggibile.

Abbiamo visto come:

  • assegnare i valori di una tupla a più variabili;
  • ignorare elementi non necessari con _;
  • restituire più valori da una funzione;
  • scambiare variabili in una sola riga;
  • gestire anche sequenze di lunghezza variabile con *resto;
  • iterare su liste di tuple in modo pulito.

Se vuoi scrivere codice Python più idiomatico, l’unpacking delle tuple è una competenza da padroneggiare bene. È semplice da imparare, ma fa una grande differenza nella qualità del codice.

Approfondisci con risorse ufficiali

  • Python Documentation - Data Structures: https://docs.python.org/3/tutorial/datastructures.html
  • Python Documentation - More on Defining Functions: https://docs.python.org/3/tutorial/controlflow.html#defining-functions
  • Python Documentation - The Python Language Reference: https://docs.python.org/3/reference/
  • PEP 3132 - Extended Iterable Unpacking: https://peps.python.org/pep-3132/

SHARE