[Python-Dev] metaclass insanity (original) (raw)

David Abrahams dave@boost-consulting.com
05 Nov 2002 09:58:21 -0500


Just van Rossum <just@letterror.com> writes:

[JvR] > > class Outer: > > [snip snip] > > def iter(self): > > while not self.isAtEnd(): > > result = self.outer.currentState() > > self.outer.advanceState() > > yield result

[David Abrahams] > This only works for 'self-iterable' types like files, right? No, the generator-iterator can hold state in the form of local variables. That isn't used in this example, though.

Ahh, closures...

[later] > Hey, wait a sec! > > It doesn't surprise me at all that the above is more compact. I don't > see any next() interface, nor any raising of StopIteration. Does it > really satisfy the iterator protocol?

Heh, yeah, that's what generators do. You call a generator-function (like the iter() method above) and it returns a generator-iterator. The magic word is "yield".

Too cool!

-- David Abrahams dave@boost-consulting.com * http://www.boost-consulting.com