[Python] media di un generatore

Giovanni Porcari giovanni.porcari a softwell.it
Mer 11 Dic 2013 19:19:25 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
> 
> La (bella) versione di Giovanni č perņ un po' inefficiente.
> 


        
class Enumerated(object):
    
    def __init__(self, gen):
        self.gen = enumerate(gen)
        self._counter=0
        
    def count(self):
        return self._counter+1

    def __iter__(self):
        for k in self.gen:
            self._counter, k = k
            yield(k)
        
    def __getattr__(self,name):
        return self.gen.__getattribute__(name)
        


Con questa versione di Enumerated i tempi migliorano un po:

avg1 3.31683301926
avg2 2.97292208672
avg3 5.03367805481
avg4 1.97484779358
avg5 3.58412313461


Ciao

G


Maggiori informazioni sulla lista Python