Almacenar funciones en lista y llamarlas más tarde.

Quiero almacenar funciones en una lista y luego en un progtwig llamar a esas funciones de esa lista.

Esto funciona para mí, sin embargo, no sé si es correcto:

#example functions, my functions would actually get user input etc. def func1(): return 2 def func2(): return 3 options = [ func1, func2 ] #call functions options[0]() 

¿Es esta la forma correcta de almacenar funciones en una lista y llamarlo? ¿O hay una manera diferente y mejor de hacer esto?

Si, puedes hacerlo. Si desea llamar a todas las funciones en la lista con un “liner”, puede hacer lo siguiente:

 results = [f() for f in options] 

Sí, esto es correcto, aunque si sus funciones son realmente de una sola línea, le sugiero que también eche un vistazo a las lambdas , de modo que su código completo se pueda reducir a:

 options = [lambda: 3, lambda: 2] 

Como ya se señaló en los comentarios, por supuesto, deberá recordar el orden de las funciones en la lista.

Me gusta hacer cosas como

 class Commander: def CommandERROR(*args,**kwargs): print "Invalid command" def CommandFunc1(*args,**kwargs): print "Do Command 1" def CommandFunc2(*args,**kwargs): print "Do Command 2" def CallCommand(command,*args,**kwargs): self.__dict__.get("Command"+command,self.CommandError)(*args,**kwargs) cmd = Commander() cmd.CallCommand("Func1","arg1",something=5) cmd.CallCommand("Func2","arg2",something=12) cmd.CallCommand("Nothing","arg1",something=5) 

como se señaló en los comentarios, también puede poner esto en su propio archivo para crear el espacio de nombres y omitir la clase … aunque si necesita afectar el estado, tal vez una clase sea una mejor opción … también podría usar un simple dictado

No estoy seguro de cómo otros lo hacen, pero lo hago de la misma manera. Es perfecto para mis códigos básicos, por lo que creo que también pueden usarse en otros lugares.