[Python] invocare funzione dal nome
y3s a katamail.com
y3s a katamail.com
Lun 28 Apr 2008 13:37:42 CEST
> 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
Maggiori informazioni sulla lista
Python