2013/6/25 Giovanni Porcari <giovanni.porc...@softwell.it> > > Il giorno 25/giu/2013, alle ore 16:08, Gollum1 <gollum1.smeag...@gmail.com> > ha scritto: > > > Ho trovato in alcuni articoli (il principale è stato un articolo su > > stackoverflow, sul case che in python non esiste) e nel testo del > > nostro Marco Beri la possibilità di utilizzare una funzione come > > argomenti di un'altra funzione... > > > > il mio intento sarebbe quello di richiamare delle funzioni in base ad > > un parametro passato dalla linea di comando, e processato da > > argparse() > > > > quindi ho preparato questa def: > > > > def exec_function(function, *args, **kargs): > > function(args, kargs) > > > > nel main richiamo la funzione passando come primo argomento l'output > > di argparse relativo proprio a quello che mi serve... > > > > il problema è che function risulta essere una stringa, e giustamente > > non può essere usata come funzione... come posso passare dal nome > > della funzione contenuta in una stringa, alla funzione vera e propria? > > > > Naturalmente ora tutto funziona con una serie di if...elif...else, > > quindi è una domanda più accademica che altro. > > > > Grazie... > > > > > usare getattr(self, nome) ? >
In base all'uso finale di ciò che stai facendo, ci sono diversi metodi per "caricare" una funzione partendo dal suo nome: 1) Se tutte le funzioni sono dentro lo stesso modulo e si tratta di uno "script" potresti usare globals() e prenderti la funzione da lì. 2) Un'altro metodo sarebbe avere il "path" d'importazione ("miomodulo.miafunzione") della funzione ed importarla in exec_function. (Questa non la consiglio ameno che tu non sappia esattamente cosa stai facendo. Ci sono metodi migliori per gestire import dinamici) 3) Se si tratta invece di un metodo ed è definito nella classe che definisce exec_function (cosa che non sembra, vista la signature di exec_function) allora potersti usare getattr. 4) Usa entry_points e carica le funzioni che appartengono al tuo namespace dinamicamente. Stevedore[0] è una libreria che ti permette fare questo facilmente ed ha supporto per diversi pattern. Personalmente, preferisco #4 ameno che non stia facendo un semplice script. FF [0] http://stevedore.readthedocs.org/en/latest/ -- -- Flavio (@flaper87) Percoco http://www.flaper87.org http://github.com/FlaPer87
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python