match case

La versione 3.10 di Python introduce la struttura di controllo match case

  1. rende più leggibile la selezione multipla
  2. recupera la distanza da altri linguaggi che prevedono l’istruzione, anche se con altri nomi
    • BASIC: select
    • C: switch
    • PASCAL: case
  3. rilancia con una sintassi molto più completa

1

match x:
    case 1: ...
    case 2: ... 
    case 3: ...

Un caso per ogni singolo valore di una variabile / espressione x

2

match x:
    case 1: ...
    case 2: ... 
    case other: ...

oppure

match x:
    case 1: ...
    case 2: ... 
    case _: ...

Un caso per ogni singolo valore di una variabile / espressione x e un caso per i valori non previsti

3

match x:
    case 1 | 2: ...
    case 3 | 4 | 5: ...
    case _: ...

Un caso per uno o più valori di una variabile / espressione x

  • 1 oppure 2
  • 3 oppure 4 oppure 5

4

match x: 
    case 1: ... 
    case 2 if(...): ... 
    case _: ...

Con controllo (non è sufficiente il match con x, deve essere superato il test successivo)

5

match x: 
    case x if(...): ... 
    case x if(...): ... 
    case _: ...

Se il match con x è garantito… allora rimane da superare l’if

6

lista = [0,1,2,3,4,5]

match lista:
    case [1 ,2, 3, 4]: print("1 2 3 4")
    case [1, 2, *sub]: print("1 2 ...", sub)
    case [*sub, 4, 5]: print(sub, "... 4 5")
    case _: print('Altri casi')

Confronto tra liste (con asterisco…)

  • Uguale a 1 2 3 4?
  • Comincia con 1 2?
  • Finisce con 4 5?

7