On Mar 19, 3:36 pm, Wilbert Berendsen <[EMAIL PROTECTED]> wrote: > Hi, > > i am writing a simple parser, that generates tokens. The parser needs to > maintain some state, because some parts of the file consist of different > tokens. I thought the object could simply remember its state by assigning > it's next() method to the method that is currently parsing. When the state > changes, the called method rebinds next() and the next token will be returned > by that function. Here's an example, proving that this indeed works. > > >>> class A: > > ... def a(self): > ... self.next = self.b > ... return 1 > ... def b(self): > ... self.next = self.a > ... return 2 > ... def __iter__(self): > ... return self > ...>>> a=A() > >>> a.a() > 1 > >>> a.next() > 2 > >>> a.next() > 1 > >>> j=0 > >>> for i in a: > > ... j += 1 > ... if j > 10: break # prevent from running endlessly > ... print i > ... > 2 > 1 > 2 > 1 > 2 > 1 > 2 > 1 > 2 > 1 > > > > my question is: is this legal Python? An iterator could save the next() method > object, and in that case it could stop working.... It works now, because > apparently the for- construct resolves 'next' each time for the object before > calling it. > > The other solution would be just jumping to the correct method from within the > next() method. But that gives an extra call... > > Met vriendelijke groet, > Wilbert Berendsen > > --http://www.wilbertberendsen.nl/ > "You must be the change you wish to see in the world." > -- Mahatma Gandi
"""" "You must be the change you wish to see in the world." -- Mahatma Gandi """" JFYI: Mahatma Gandhi (NOT Gandi). -- http://mail.python.org/mailman/listinfo/python-list