<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">2013/6/25 Giovanni Porcari <span dir="ltr"><<a href="mailto:giovanni.porcari@softwell.it" target="_blank">giovanni.porcari@softwell.it</a>></span><br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
Il giorno 25/giu/2013, alle ore 16:08, Gollum1 <<a href="mailto:gollum1.smeagol1@gmail.com">gollum1.smeagol1@gmail.com</a>> ha scritto:<br>
<br>
> Ho trovato in alcuni articoli (il principale è stato un articolo su<br>
> stackoverflow, sul case che in python non esiste) e nel testo del<br>
> nostro Marco Beri la possibilità di utilizzare una funzione come<br>
> argomenti di un'altra funzione...<br>
><br>
> il mio intento sarebbe quello di richiamare delle funzioni in base ad<br>
> un parametro passato dalla linea di comando, e processato da<br>
> argparse()<br>
><br>
> quindi ho preparato questa def:<br>
><br>
> def exec_function(function, *args, **kargs):<br>
>    function(args, kargs)<br>
><br>
> nel main richiamo la funzione passando come primo argomento l'output<br>
> di argparse relativo proprio a quello che mi serve...<br>
><br>
> il problema è che function risulta essere una stringa, e giustamente<br>
> non può essere usata come funzione... come posso passare dal nome<br>
> della funzione contenuta in una stringa, alla funzione vera e propria?<br>
><br>
> Naturalmente ora tutto funziona con una serie di if...elif...else,<br>
> quindi è una domanda più accademica che altro.<br>
><br>
> Grazie...<br>
><br>
<br>
<br>
usare getattr(self, nome) ?<br></blockquote><div><br></div><div><br></div><div style>In base all'uso finale di ciò che stai facendo, ci sono diversi metodi per "caricare" una funzione partendo dal suo nome:</div>

<div style><br></div><div style>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ì.</div><div style><br></div><div style>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)</div>

<div style><br></div><div style>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.</div><div style>

<br></div><div style>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.</div><div style>

<br></div><div style>Personalmente, preferisco #4 ameno che non stia facendo un semplice script.</div><div style><br></div><div style>FF</div><div style><br></div><div style>[0] <a href="http://stevedore.readthedocs.org/en/latest/" rel=" noreferrer">http://stevedore.readthedocs.org/en/latest/</a></div>

</div><div><br></div>-- <br><div dir="ltr"><span style="border-collapse:separate;border-spacing:0px"><div><font><span style="font-family:Helvetica">-- </span><span style="font-family:Helvetica"><br></span><font face="arial, helvetica, sans-serif">Flavio (@flaper87) Percoco</font></font></div>

<div style="font-family:Helvetica"><a href="http://www.flaper87.org" rel=" noreferrer" target="_blank"><font>http://www.flaper87.org</font></a></div><div style="font-family:Helvetica"><a href="http://github.com/FlaPer87" rel=" noreferrer" target="_blank"><font>http://github.com/FlaPer87</font></a><br>

</div></span></div>
</div></div>