lettura facile

Enumerazioni in Python

Le enumerazioni in Python sono una lista di valori predefiniti, che puoi usare per rendere il codice più leggibile e prevenire errori.

Immagina di avere delle scelte limitate e definite,  come i giorni della settimana o i colori di un semaforo. Invece di utilizzare delle semplici stringhe o numeri per rappresentarli, che potrebbero facilmente essere sbagliati o confusi, puoi utilizzare una enumerazione.

Nel linguaggio Python c'è un'apposita classe chiamata `Enum` che ti permette di definire le enumerazioni. Si trova nell'omonimo modulo `Enum`.

Ti faccio un esempio pratico. Immagina di voler rappresentare i giorni della settimana.

Senza usare la classe `Enum`, potresti fare qualcosa del genere:

giorno1 = "lunedì"
giorno2 = "martedì"
giorno3 = "mercoledì"

Sembra ok, giusto? Ma cosa succede se qualcuno scrive "mercoledí" con un accento diverso o "giovedi" senza l’accento?

Questo introduce un margine d’errore e, si sa, gli errori sono come piccoli sabotatori nel nostro codice. Ecco dove entra in gioco l'uso delle enumerazioni.

Vediamo cosa accade se utilizzi la classe Enum.

Con `Enum`, puoi definire i giorni della settimana in modo molto più sicuro e strutturato:

from enum import Enum

class GiorniSettimana(Enum):
    LUNEDI = 1
    MARTEDI = 2
    MERCOLEDI = 3
    GIOVEDI = 4
    VENERDI = 5
    SABATO = 6
    DOMENICA = 7

In questo esempio hai creato una classe `GiorniSettimana` che eredita dalla classe `Enum`.

Ogni giorno della settimana ha un nome ben definito e un valore numerico associato. Questo significa che puoi referenziare i giorni senza paura di errori di digitazione:

oggi = GiorniSettimana.LUNEDI
print(oggi)

Questo stamperà:

GiorniSettimana.LUNEDI

Ma non è tutto! Puoi anche accedere al valore numerico associato:

print(oggi.value)

1

Facciamo un altro esempio pratico. Immagina di creare un programma che controlla i colori di un semaforo.

Puoi usare stringhe come `"rosso"`, `"giallo"` e `"verde"`, ma se qualcuno inserisce per errore `"verdi"`, il programma potrebbe funzionare male.

Con un'Enum, possiamo definire chiaramente i valori consentiti.

from enum import Enum

class Semaforo(Enum):
    ROSSO = 1
    GIALLO = 2
    VERDE = 3

def azione_semaforo(colore):
    if colore == Semaforo.ROSSO:
        print("Fermati!")
    elif colore == Semaforo.GIALLO:
        print("Prepara a fermarti.")
    elif colore == Semaforo.VERDE:
        print("Vai!")
    else:
        print("Colore non valido.")

azione_semaforo(Semaforo.ROSSO) 

In questo esempio la funzione azione_semaforo è progettata per ricevere un valore (chiamato colore) tramite uno dei membri dell'enumerazione Semaforo.

Le nomine automatiche

Ecco un piccolo trucco extra che è utile conoscere quando utilizzi le enumerazioni.

Se non ti interessa assegnare valori specifici ai membri di un'Enum, puoi usare `auto()` per far sì che Python si occupi di tutto:

from enum import Enum, auto

class Semaforo(Enum):
    ROSSO = auto()
    GIALLO = auto()
    VERDE = auto()

In questo caso, i valori sono assegnati automaticamente (0, 1, 2 e così via), senza bisogno che tu lo faccia manualmente.

Perché le Enumerazioni sono utili?

In primo luogo usando `Enum`, sei sicuro che i valori passati alla funzione siano quelli corretti ed eviti errori potenziali.

Un altro aspetto interessante è che puoi facilmente iterare su un'Enum per ottenere tutti i suoi membri.

Ad esempio, se vuoi stampare tutti i colori del semaforo:

for colore in Semaforo:
    print(colore)

Questo stamperà:

Semaforo.ROSSO
Semaforo.GIALLO
Semaforo.VERDE

Un'altra cosa importante: con le enumerazioni non confronti le cose come faresti con le stringhe o i numeri.

Non confronti `Semaforo.ROSSO` con `1` direttamente, ma li confronti tra loro. È una sorta di sicurezza extra per evitare errori accidentali.

colore = Semaforo.ROSSO

if colore == Semaforo.ROSSO:
    print("Il colore è rosso!")  

In conclusione, le enumerazioni sono uno strumento molto utile quando devi gestire un set fisso di valori. Rendono il codice più leggibile, più sicuro e meno incline agli errori.

Certo, potresti fare tutto con stringhe e numeri, ma perché correre rischi quando in Python puoi usare un approccio strutturato come `Enum`?

Quindi, la prossima volta che hai bisogno di rappresentare uno stato con valori definiti, considera l'uso delle enumerazioni. 




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




FacebookTwitterLinkedinLinkedin