[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