<div dir="ltr"><div>Ciao a tutti, un altro quesito della Susy: data una funzione e una collezione, come fate a calcolare il valore in corrispondenza del quale la funzione e' massimizzata?</div><div><br></div><div>Diciamo che ogni oggetto nella collezione _values implementa un metodo func() che ritorna un valore confrontabile.</div>
<div><br></div><div>V1</div><div> def _max_value(self):</div><div> max_value = self._values[0]<span class="" style="white-space:pre"> </span># facciamo finta che la la collezione e' per definizione non vuota e ogni valore e' significativo</div>
<div> for i in range(1, len(self._values)): </div><div> if self._values[i].func() > max_values.func():</div><div> max_value = self._values[i]</div><div>
return max_value</div><div><br></div><div>Questa versione funziona, ma il codice fa francamente un po' schifo e la prossima volta che ho un problema simile dovro' riscrivere tutto.</div><div><br></div><div>
V2</div><div> def value_at_max(values, functor):</div><div> max_value = None<span class="" style="white-space:pre"> </span># si usano trucchetti come questo con None o ci sono modi migliori?</div><div> for value in values:</div>
<div> if not max_value or functor(value) > functor(max_value):</div><div> max_value = value</div><div> return max_value</div><div><br></div><div> def _max_value(self):</div><div> return value_at_max(self._values, lambda v: v.func())</div>
<div> </div><div>V2 mi sembra meglio, riutilizzero' value_at_max in altri posti.</div><div><br></div><div>C'e' un V3 migliore? Se ci fosse gia' una funzione built-in sarei ancora piu' contento.</div>
<div>Come la mettiamo in termini "pitonici"? Sto distorcendo il linguaggio in modo innaturale?</div><div><br></div><div>Ciao,</div><div>Giuliano</div><div><br></div>-- <br>Piergiuliano Bossi<br>Blog: <a href="http://thinkingbox.wordpress.com/" target="_blank">http://thinkingbox.wordpress.com/</a><br>
Twitter: <a href="http://twitter.com/thinkingbox" target="_blank">http://twitter.com/thinkingbox</a> (English)<br>Twitter: <a href="http://twitter.com/scatolapensante" target="_blank">http://twitter.com/scatolapensante</a> (Italiano)<br>
<div>Google+: <a href="https://plus.google.com/u/0/108187981162465525118" target="_blank">https://plus.google.com/u/0/108187981162465525118</a></div>
</div>