mercoledì 25 marzo 2009

Switch in Python

Com'è noto Python non supporta la sintassi "switch".

Invece che scrivere interminabili e poco leggibili catene di if/elif/else è possibile risolvere elegantemente la cosa con un dizionario.

Ecco un esempio:

        switch = {
'vigenere': Key(parameters),
'des': DESWrapper(password),
'3des': TripleDESWrapper(password)
}

if crypto_type in switch:
self.crypto = switch[crypto_type]
else:
pass
In questo esempio la funzione imposta l'oggetto self.crypto basandosi su una stringa di input crypto_type, che può assumere i seguenti valori:

  • vigenere
  • des
  • 3des

(come potete immaginare è un programma di crittografia). Il dizionario inizializza l'oggetto che, a seconda della stringa in input, può diventare di tipo "Key", "DesWrapper" o "TripleDesWrapper", passando al costruttore gli argomenti corretti.

Se la stringa crypto_type è trovata all'interno del dizionario switch l'oggetto viene inizializzato, altrimenti il programma passa oltre.