On 2010-02-18 16:25 PM, Stephen Hansen wrote:
This has to be a stupid question, but :)
I have some generators that do stuff, then start yielding results. On
occasion, I don't want them to yield anything ever-- they're only really
"generators" because I want to call them /as/ a generator as part of a
generalized system.
The only way I can figure out how to make an empty generator is:
def gen():
# do my one-time processing here
return
yield
Is there a better way? The return/yield just makes me flinch slightly. I
tried just raising StopIteration at the end, but of course that didn't work.
class once(object):
def __init__(self, func, *args, **kwds):
self.func = func
self.args = args
self.kwds = kwds
def __iter__(self):
return self
def next(self):
self.func(*self.args, **self.kwds)
raise StopIteration()
Then write regular functions with the one-time processing code (not
generators!). When you go to pass them into your system that wants an iterator,
just wrap it with once(func).
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
--
http://mail.python.org/mailman/listinfo/python-list