L'istruzione Switch di Python

Introduzione

L'istruzione switch è uno strumento potente e conveniente per controllare il flusso del programma. Ti consente di creare rapidamente e facilmente più rami di codice, a seconda del valore di una determinata variabile o espressione. Viene comunemente utilizzato quando è necessario eseguire una logica diversa a seconda del valore di una determinata variabile, che può avere più di 2 (ma un numero finito) di valori.

In questo articolo esploreremo come utilizzare l'istruzione switch in Python e discuteremo i suoi vantaggi rispetto ad altre strutture di controllo. Che tu sia nuovo in Python o uno sviluppatore esperto, l'istruzione switch può aiutarti a scrivere codice più pulito ed efficiente.

Prima della versione 3.10

Prima che l'istruzione switch di Python fosse disponibile in modo nativo nel linguaggio, i programmatori dovevano utilizzare altre strutture di controllo per ottenere la stessa funzionalità. Un approccio comune consisteva nell'utilizzare una serie di istruzioni if-else, con ciascun ramo di codice associato a un valore diverso della variabile da testare.

Si consideri ad esempio il seguente codice:

value = "foo"

if value == "foo":
    print("foo was selected")
elif value == "bar":
    print("bar was selected")
else:
    print("Nothing valid was selected")

In questo codice utilizziamo un'istruzione if-else per determinare quale ramo di codice eseguire in base al valore della variabile value. Se value è uguale a “foo”, verrà eseguito il primo ramo del codice. Se value è uguale a “bar”, verrà eseguito il secondo ramo di codice. Altrimenti, il codice nel file else il blocco verrà eseguito.

Sebbene questo approccio funzioni, può diventare rapidamente scomodo man mano che aumenta il numero di valori possibili per la variabile. Inoltre, può rendere difficile la lettura e la comprensione del codice.

Un altro approccio che può essere utilizzato per creare un'istruzione simile a un interruttore in Python è utilizzare un dizionario. In questo approccio, le chiavi del dizionario sono i possibili valori della variabile da testare e i valori sono i corrispondenti rami di codice.

Si consideri ad esempio il seguente codice:

value = "foo"

switch = {
    "foo": lambda: print("foo was selected"),
    "bar": lambda: print("bar was selected"),
    "default": lambda: print("Nothing valid was selected"),
}

switch.get(value, "default")()

In questo codice abbiamo definito un dizionario chiamato switch, con le chiavi che rappresentano i possibili valori della variabile value. Per ogni chiave abbiamo assegnato come valore una funzione lambda, che contiene il ramo di codice corrispondente. Per eseguire il ramo di codice appropriato, utilizziamo il file get() metodo del dizionario, che ci permette di specificare un valore predefinito da utilizzare se la chiave data non esiste nel dizionario.

Sebbene questo approccio sia più flessibile e compatto rispetto all'utilizzo delle istruzioni if-else, può comunque essere difficile da leggere e comprendere, soprattutto se il codice in ciascun ramo è complesso. Inoltre, richiede l'uso di funzioni lambda, che possono creare confusione per alcuni programmatori. Non suggeriamo di utilizzare questo metodo a meno che per qualche motivo non sia possibile utilizzare gli altri metodi in questo articolo.

Con l'introduzione dell'istruzione switch Python in Python v3.10, i programmatori ora hanno un modo più comodo e intuitivo per controllare il flusso dei loro programmi in base al valore di una determinata variabile o espressione. Nella prossima sezione esploreremo come utilizzare un'effettiva istruzione switch in Python.

Il match/case Dichiarazione (dopo la versione 3.10)

Dopo Python v3.10, l'istruzione switch viene gestita utilizzando il metodo match parola chiave. Questa parola chiave viene utilizzata per creare un'espressione di corrispondenza dei modelli, che consente di testare il valore di una determinata variabile o espressione rispetto a una serie di modelli. Se viene trovata una corrispondenza, viene eseguito il ramo di codice corrispondente.

Si consideri ad esempio il seguente codice:

value = "foo"

match value:
    case "foo":
        print("foo was selected")
    case "bar":
        print("bar was selected")
    case _:
        print("Nothing valid was selected")

Dai un'occhiata alla nostra guida pratica e pratica per l'apprendimento di Git, con le migliori pratiche, gli standard accettati dal settore e il cheat sheet incluso. Smetti di cercare su Google i comandi Git e in realtà imparare esso!

In questo codice utilizziamo il file match parola chiave per creare un'espressione di corrispondenza dei modelli, che verifica il valore della variabile value contro una serie di schemi. Se value è uguale a “foo”, verrà eseguito il primo ramo del codice. Se value è uguale a “bar”, verrà eseguito il secondo ramo di codice. Altrimenti verrà eseguito il codice nel blocco else.

Sfumare

Una delle differenze chiave tra le istruzioni switch in Python e le tradizionali istruzioni switch in altri linguaggi è che quelle di Python match l'istruzione non supporta il fall-through. In altre parole, una volta trovata una corrispondenza e eseguito il ramo di codice corrispondente, il file match l'espressione termina e nessun altro codice nel file match l'istruzione viene eseguita. In altre lingue, ciò si ottiene solitamente utilizzando il comando break parola chiave, che non è necessaria o supportata qui.

Se vuoi ottenere lo stesso comportamento del fall-through in un'istruzione switch tradizionale, puoi utilizzare il metodo | operatore per abbinare più casi. Questo operatore consente di specificare più modelli in uno solo casee qualsiasi modello può essere abbinato per attivare l'esecuzione di quel ramo.

Si consideri ad esempio il seguente codice:

value = "y"

match value:
    case "yes" | "y":
        print("The user confirmed")
    case _:
        print("The user denied")

Qui, se il valore di value è uguale a “sì” or “y”, verrà eseguito il primo ramo del codice. Ciò equivale al comportamento fall-through in un'istruzione switch tradizionale.

Impostazioni predefinite

Come probabilmente avrai notato dagli esempi precedenti, il caso "predefinito" viene gestito utilizzando un carattere di sottolineatura (_). Questo è considerato il "carattere jolly" e corrisponde a tutti i valori. Se uno dei casi precedenti corrisponde al valore, il ramo di codice predefinito viene ignorato e non eseguito.

Conclusione

Come puoi vedere, l'istruzione match di Python (nota anche come "switch") offre un modo potente e conveniente per controllare il flusso del tuo programma. Che tu sia nuovo in Python o uno sviluppatore esperto, l'istruzione switch può aiutarti a scrivere codice più pulito ed efficiente.

Timestamp:

Di più da Impilamento