Sono relativamente nuovo a Python e vorrei sapere se sto reinventando una ruota o faccio le cose in modo non piti- co - ho letto male.Dichiarazione switch-like basata sul dizionario con azioni
Sto riscrivendo un parser originariamente scritto in Lua. Esiste una funzione che accetta un nome di campo dalla tabella importata e il suo valore, esegue alcune azioni sul valore e lo memorizza nel dizionario di destinazione con un nome di chiave appropriato.
Nel codice originale è risolto da una lunga istruzione tipo switch con funzioni anonime come azioni. codice Python è simile al seguente:
class TransformTable:
target_dict = {}
...
def mapfield(self, fieldname, value):
try:
{
'productid': self.fn_prodid,
'name': self.fn_name,
'description': self.fn_desc,
...
}[fieldname](value)
except KeyError:
sys.stderr.write('Unknown key !\n')
def fn_name(val):
validity_check(val)
target_dict['Product'] = val.strip().capitalize()
...
funzione Ogni "campo-handler" fa diverse azioni e negozi in chiavi diverse in target_dict, naturalmente. Dato che Python non supporta funzioni anonime con istruzioni (o mi sono perso qualcosa?) Le funzioni devono essere scritte separatamente, il che rende il codice meno leggibile e inutilmente complicato.
Qualsiasi suggerimento su come svolgere tali compiti in un modo più elegante e più sdolcinato è apprezzato.
Thx
David
Si potrebbe anche voler fare uno sforzo per evitare di reinventare la domanda cercando qui simili prima di postarne uno. – martineau