lettura facile

Spacchettamento degli oggetti iterabili in Python

Lo spacchettamento, noto anche come "unpacking", è una delle caratteristiche distintive del linguaggio di programmazione Python.

A cosa serve? Ti offre un modo elegante e compatto per assegnare valori da oggetti iterabili a variabili. In questo tutorial, esploreremo le diverse sfaccettature dello spacchettamento e come può semplificare e arricchire la tua esperienza di codifica.

In termini semplici, lo spacchettamento ti permette di assegnare elementi di un oggetto iterabile, come una lista o una tupla, a variabili separate in una sola riga di codice.

Ecco un esempio pratico.

Digita questa riga sul terminale di Python.

a, b, c = [1, 2, 3]

Questo comando spacchetta la lista [1,2,3] assegnando il valore 1 alla variabile "a", il valore 2 alla variabile "b" e il valore 3 alla variabile "c".

print(a)

1

Le potenzialità dello spacchettamento però non si riducono solo a questi aspetti.

Lo scambio di variabili

Lo spacchettamento può semplificare operazioni come lo scambio di variabili.

Ad esempio, digita questo comando.

a, b = b, a

Tramite lo spacchettamento Python assegna alla variabile a il contenuto della variabile b, e viceversa, senza usare una terza variabile di appoggio.

a=1
b=2
a,b=b,a
print(a)

2

Lo spacchettamento nelle funzioni

Puoi usare lo spacchettamento anche essere utilizzato in funzioni che restituiscono più di un valore, facilitando l'assegnazione dei risultati.

Ecco un esempio pratico.

  1. def divisione_e_resto(a, b):
  2. div_int = a // b
  3. resto = a % b
  4. return div_int, resto
  5.  
  6. div, res = divisione_e_resto(10, 3)
  7. print(f"Divisione intera: {div}, Resto: {res}")

In questo script viene definita una funzione che restituisce il quoziente e il resto della divisione.

Quando viene richiamata la funzione, lo spacchettamento ti permette di assegnare i due output a due variabili distinte: div e res.

Spacchettamento di stringhe

Le stringhe sono sequenze di caratteri e, quindi, sono oggetti iterabili.

Questo significa che puoi spacchettare una stringa nei suoi singoli caratteri:

x, y, z = 'abc'

Questo comando assegna i caratteri 'a', 'b' e 'c' rispettivamente alle variabili x, y e z.

print(x)

a

Spacchettamento di file

Puoi spacchettare le righe di testo di un file riga per riga.

Ecco un esempio pratico.

  • with open('file.txt', 'r') as f:
  • linea1, linea2, linea3 = f

La variabile linea1 riceve la prima riga di testo del file, linea2 la seconda e linea3 la terza.

Spacchettamento di dizionari

Mentre lo spacchettamento è comunemente associato a liste e tuple, può anche essere utilizzato con dizionari.

Tuttavia, lo spacchettamento di un dizionario assegna le sue chiavi, non i suoi valori.

x, y, z = {'nome': 'Giovanni', 'cognome': 'Bianchi', 'eta': 30}

Alla variabile x viene assegnata la prima chiave 'nome', alla variabile y la seconda chiave 'cognome' e alla variabile z la terza chiave 'eta'

print(x)

nome

Poiché i dizionari non conservano un ordine, l'ordine di spacchettamento non è garantito.

Lo spacchettamento esteso

Introducendo un asterisco * puoi assegnare a una variabile una lista di elementi.

Ad esempio, digita questo comando sul terminale di Python.

*x, y = [1, 2, 3, 4]

Alla variabile x viene assegnata la lista [1, 2, 3] mentre alla variabile y l'ultimo valore 4.

In pratica, alla variabile y viene assegnato l'ultimo valore della lista mentre alla variabile *x la lista dei restanti elementi

*x, y, z = [1, 2, 3, 4]

In questo caso, Python assegna 4 alla variabile z, 3 alla variabile y e la lista degli elementi restanti [1,2] alla variabile *x con l'asterisco.

Ovviamente, l'asterisco * puoi inserirlo davanti a qualsiasi variabile, non necessariamente alla prima.

x, *y, z = [1, 2, 3, 4]

Ora alle variabili x e z sono assegnati rispettivamente i valori 3 e 4, mentre alla variabile *y la lista [1,2]

Cosa accade se il numero delle etichette coincide con il numero dei valori?

*x, y, z = [1, 2, 3]

Se il numero dei valori coincide con quello delle variabili, alla variabile *x con l'asterisco viene assegnata la lista composta da un unico elemento ossia [1].

E se il numero delle etichette è insufficiente a contenere tutti gli elementi?

 

*x, y, z = [1, 2]

Se non ci sono valori restanti da assegnare, alla variabile *x con l'asterisco viene assegnata una lista vuota [ ]

 




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




FacebookTwitterLinkedinLinkedin