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

Aahz aahz@pythoncraft.com
Tue, 5 Nov 2002 10:13:33 -0500


On Tue, Nov 05, 2002, Just van Rossum wrote:

Just van Rossum wrote:

class Outer: [snip snip] def iter(self): while not self.isAtEnd(): result = self.outer.currentState() self.outer.advanceState() yield result PS, getting more off-topic, I'm somewhat surprised that the above is more compact and readable than the obvious generator-less equivalent: class Outer: [snip snip] def iter(self): return self def next(self): if self.isAtEnd(): raise StopIteration else: result = self.outer.currentState() self.outer.advanceState() return result

Hmmmm... I'm surprised that you're surprised. Here's my slide from OSCON2002:

Generators simpler No need to explicitly maintain state

Iterators more controllable Can manipulate internal state (e.g., del method on iterator object to handle cleanup)

Can be backported to older versions of Python

Generally speaking, I can think of few reasons to build an actual iterator class rather than a generator.

Aahz (aahz@pythoncraft.com) <*> http://www.pythoncraft.com/

Project Vote Smart: http://www.vote-smart.org/