Endless loop

vsoler vicente.soler at gmail.com
Sat Jan 2 08:45:18 EST 2010


On 2 ene, 14:21, Ulrich Eckhardt <dooms... at knuut.de> wrote:
> vsoler wrote:
> > class stepper:
> >     def __getitem__(self, i):
> >         return self.data[i]
>
> > X=stepper()
> > X.data="Spam"
> > for item in X:
> >     print item,
>
> > ... what I get is     S p a m     which seems logical to me since the
> > loop stops after the 4th character.
>
> I think you're mistaking the cause and effect here, see below.
>
> > class stepper:
> >     def __getitem__(self, i):
> >         return i
>
> > X=stepper()
> > X.data="Spam"
> > for item in X:
> >     print item,
>
> > ... what I get is an endless loop, starting at zero:    0 1 2 3 4 5 6
> > 7 8 9 10 11  and so on.
>
> > My question is: why does this second script not stop after printing
> > number 3?  what made the first one stop while the second one will not?
>
> First thing to observe in the second case is that X's data field is not used
> anywhere. The field is set and then not used any further. In particular, it
> is not used to somehow get the length of the sequence to return.
>
> Now, "spam"[4] will raise an IndexError, thus terminating the iteration. The
> second implementation which only returns the index never will do that, so
> the iteration never stops.
>
> Uli

It's clear, I now understand.

Thank you



More information about the Python-list mailing list