[Python] media di un generatore
Giovanni Porcari
giovanni.porcari a softwell.it
Mer 11 Dic 2013 18:42:50 CET
Il giorno 11/dic/2013, alle ore 16:45, Marco Beri <marcoberi a gmail.com> ha scritto:
> On Wed, Dec 11, 2013 at 4:31 PM, Piergiuliano Bossi <pgbossi a gmail.com> wrote:
> Mi piace molto. Ho solo una domanda: perche' serve __getattr__ e perche' ribalta la chiamata su __getattribute__ del generatore?
>
>
> avg1 2.72754812241
> avg2 2.58321499825
> avg3 6.11401891708
> avg4 2.8605260849
> avg5 4.49426484108
tra l'altro ho aggiunto un altro metodo e ho ottenuto questi tempi :
avg1 3.25835704803
avg2 3.29155302048
avg3 5.01489901543
avg4 2.00609302521
avg5 4.07783102989
avg6 1.37758612633
Cosa dice avg6 ?
Ecchilo :
def avg6():
x=list(gen(100000))
return sum(x)/len(x)
Cioè il modo più sprecone per la memoria è in assoluto
molto più veloce.
E perchè la avg4 è così veloce ?
Ecco la risposta dalla documentazione di 'tee':
This itertool may require significant auxiliary storage (depending on how much temporary data needs to be stored).
In general, if one iterator uses most or all of the data before another iterator starts, it is faster
to use list() instead of tee().
Insomma la velocità si paga ;)
G
Maggiori informazioni sulla lista
Python