"Jordan Rastrick" <jrastrick at student.usyd.edu.au> wrote in message
news:1111766687.125697.311420 at f14g2000cwb.googlegroups.com...
> def combineIntoRecord(): # This is an acceptor function> optionalline = None # We may not get given a value for this line> accept firstline> accept secondline> if condition(secondline):> accept optionalline> accept lastline> r = createRecord(firstline, secondline, lastline, optionalline)> return r> recordlist = []> for line in lines:> recordlist.append(combineIntoRecord(line))
How about doing it this way?
class Acceptor:
def __init__(self, gen):
self.gen = gen
def next(self):
firstline = self.gen.next()
secondline = self.gen.next()
if condition(secondline):
optionalline = self.gen.next()
accept lastline
r = createRecord(firstline, secondline, lastline, optinalline)
return r
This is just a generator done longhand. If anything in Acceptor.next raises
StopIteration, so will Acceptor.next itself. Which means that you can now
write this:
for r in Acceptor(line):
recordlist.append(r)
or, for that matter,
recordlist = list(Acceptor(line))
Incidentally, I did not try to fix the bug in your code that if
condition(secondline) is false, optionalline never gets set so the program
will crash :-)