Douglas Alan <[EMAIL PROTECTED]> writes: > I think you overstate your case. Lispers understand iteration > interfaces perfectly well, but tend to prefer mapping fuctions to > iteration because mapping functions are both easier to code (they > are basically equivalent to coding generators) and efficient (like > non-generator-implemented iterators). The downside is that they are > not quite as flexible as iterators (which can be hard to code) and > generators, which are slow.
Why do you think generators are any slower than hand-coded iterators? Consider a trivial sequence iterator: $ python -m timeit -s 'l=[1] * 100 class foo(object): def __init__(self, l): self.l = l self.i = 0 def __iter__(self): return self def next(self): self.i += 1 try: return self.l[self.i - 1] except IndexError: raise StopIteration ' 'tuple(foo(l))' 10000 loops, best of 3: 173 usec per loop The equivalent generator is not only easier to write, but also considerably faster: $ python -m timeit -s 'l=[1] * 100 def foo(l): i = 0 while 1: try: yield l[i] except IndexError: break i += 1 ' 'tuple(foo(l))' 10000 loops, best of 3: 46 usec per loop -- http://mail.python.org/mailman/listinfo/python-list