2011/12/8 Marco Beri <span dir="ltr"><<a href="mailto:marcoberi@gmail.com">marcoberi@gmail.com</a>></span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="gmail_quote"><div>Puņ avere senso trappare l'import, per esempio:</div><div><br></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_quote"><div><font face="'courier new', monospace">try:</font></div>



</div><div class="gmail_quote"><div><div><font face="'courier new', monospace">    from functools import wraps</font></div></div></div><div class="gmail_quote"><div><div><font face="'courier new', monospace">except ImportError:</font></div>



</div></div><div class="gmail_quote"><div><div><font face="'courier new', monospace">    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback.</font></div></div></div></blockquote>

<div class="gmail_quote"><div><br></div><div>Tra l'altro č in questi casi che trovo utile il costrutto import ... as ....</div><div><br></div></div></blockquote><div><br></div><div>Infatti. Oppure in altri casi... per esempio networkx e' una libreria abbastanza complessa che serve per fare network analysis. Come backend di visualizzazione supporta graphviz (mi pare con due librerie diverse), matplotlib e poi non so cos'altro ancora. In piu' per fare certi calcoli puo' opzionalmente appoggiarsi a numpy o scipy.</div>

<div><br></div><div>Questo caso in C/C++ sarebbe stato gestito con un po' di autotools magic, essenzialmente non compilando le parti che dipendevano da librerie non disponibili. Aggiungo poi che questo approccio alla lunga e' una gran rottura di palle che mi ha piu' volte deliziato. E' specialmente entusiasmante sulle distribuzioni linux basate principalmente su pacchetti binari dove diventa necessario creare un fottilione di versioni diverse oppure fare il pacchettone omni-comprensivo.</div>

<div><br></div><div>In Python invece semplicemente si usa quello che serve. Alle volte il loro approccio e' un po' estremo per i miei gusti. Per esempio in alcune funzioni fa proprio:</div><div><br></div><div>def floyd_warshal_numpy(graph, ...):</div>

<div>    try:</div><div>        import numpy as np</div><div>    except ImportError:</div><div>        ...</div><div>    ...</div><div><br></div><div>Da un punto di vista prestazionale non e' un problema (un fw su una rete di dimensione ragionevole domina il tempo di import, nonostante tutto). Pero' e' bruttarello...</div>

<div><br></div><div>Ah, infine lo ho visto fare anche in un caso piu' simile al tuo: quando hai piu' librerie che implementano una certa funzione e vuoi la "migliore". Un caso tipico e' cStringIO, ma in effetti e' piu' generale.</div>

</div><br clear="all"><div><br></div>-- <br> .<br>..: -enrico-<br>