enumerate is very useful and now "progresserate"
Brian Kelley
bkelley at wi.mit.edu
Thu Nov 20 09:39:20 EST 2003
Bengt Richter wrote:
>>It's very neat (I always seem to want to turn every problem into a generator
>>problem :). But actually, in this case (unless that error checking code you
>>mention forbids it), you don't need a class. The only methods you define
>>are for the generator protocol, and none of them have arguments. So a
>>generator function is enough (and undoubtably faster):
The generator solution is better.
> If it's being used to e.g. update a display, you can help overall speed by
> returning a change flag that is only on when a new percentage is returned,
> so it's easy to skip the i/o. (Of course, this makes a difference when you have
> size much greater than 100) e.g., (untested changes)
I let the GUI control this. I.e. don't update if the last percentage
the same as the current. I'm not sure if this functionality should be
in the generator or outside.
>>def progresserate(seq):
>> size = float(len(seq))
>> iterator = iter(seq)
>> i = 0
>
> percent = -1
>
>> #what did self.last do?
>> while True: #StopIteration from iterator will propagate.
>> value = iterator.next()
>> i += 1
>> percent = int(i/size * 100)
>
> lastpc, percent = percent, int(i/size * 100 +.5)
>
>> yield percent, value
>
> yield percent!=lastpc, percent, value
>
>
> Regards,
> Bengt Richter
More information about the Python-list
mailing list