Re: [Python] invocare funzione dal nome

2008-04-28 Per discussione [EMAIL PROTECTED]

 Ciao,

 Mr.SpOOn spiffera, lunedì 28 aprile 2008 circa:
 Una soluzione penso possa essere un costrutto if-else, finché non
 trovo la funzione desiderata.
 Mi chiedevo però se ci fosse un metodo più elegante che mi permettesse
 di leggere il nome della funzione direttamente dal menu a tendina, o
 anche da un file yaml, ad esempio, e rendere così l'invocazione
 dinamica.

 Il modo piu' scemo che mi viene in mente, e' quello di creare un dict()
 con
 le tue funzioni.

 funct_dict = {'pippo':a, 'ciccio':b, 'puzzetta':c }

 e dopo le richiami normalmente, con

 result = funct_dict['puzzetta']()


Questo e' sicuramente uno dei modi migliori, in quanto hai un certo grado
di controllo su quello che puo' essere chiamato. Piu' genericamente, per
accedere dinamicamente a un attributo di un oggetto:

getattr(oggetto, nome)

quindi:

getattr(oggetto, nome_metodo)(...parametri...)

Se si tratta di una funzione locale:

locals()[nome_funzione](...parametri...)

...e cosi' via (funzioni globali, builtin, ecc)

Con il dizionario hai in genere piu' controllo, ed e' preferibile.

-- 
Antonio Valente

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] invocare funzione dal nome

2008-04-28 Per discussione Mr . SpOOn
Ok, grazie :D
Proverò entrambi i metodi.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python