Soy relativamente nuevo en Python y me gustaría saber si estoy reinventando una rueda o haciendo cosas de una forma no pitónica: leer mal.Declaración basada en el diccionario en forma de interruptor con acciones
Estoy reescribiendo algunos analizadores escritos originalmente en Lua. Hay una función que acepta un nombre de campo de la tabla importada y su valor, realiza algunas acciones sobre el valor y lo almacena en el diccionario de destino con un nombre de clave apropiado.
En el código original se resuelve mediante una declaración larga tipo conmutador con funciones anónimas como acciones. código Python tiene el siguiente aspecto:
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()
...
función de cada "campo-controlador" hace diferentes acciones y tiendas en diferentes claves en target_dict, por supuesto. Como Python no admite funciones anónimas con sentencias (¿o me perdí algo?), Las funciones deben escribirse por separado, lo que hace que el código sea menos legible e innecesariamente complicado.
Se aprecian todos los consejos sobre cómo hacer tales tareas de una manera más elegante y más pitonica.
Thx
David
Es posible que también desee esforzarse para evitar reinventar la pregunta buscando aquí otras similares antes de publicar una. – martineau