Speed-up for loops
Stefan Behnel
stefan_ml at behnel.de
Fri Sep 3 03:00:13 EDT 2010
Ulrich Eckhardt, 03.09.2010 08:52:
> Tim Wintle wrote:
>> [..] under the hood, cpython does something like this (in psudo-code)
>>
>> itterator = xrange(imax)
>> while 1:
>> next_attribute = itterator.next
>> try:
>> i = next_attribute()
>> except:
>> break
>> a = a + 10
>
> There is one thing that strikes me here: The code claims that each iteration
> there is a lookup of the 'next' field in the iterator. I would expect that
> this is looked up once before the loop only.
>
> Can you confirm that or am I misinterpreting your intention here?
It needs to do that. Nothing keeps you from redefining "next" in each call.
That's even a well known way to implement state machines.
However, as usual, the details are a bit different in CPython, which has a
C level slot for the "next" method. So the lookup isn't as heavy as it looks.
Stefan
More information about the Python-list
mailing list