On 18 February 2013 07:36, Michael O'Leary <mich...@seomoz.org> wrote: > I wrote some code to create tasks to be run in a queue based system last > week. It consisted of a big monolithic function that consisted of two parts: > 1) read data from a file and create dictionaries and lists to iterate > through > 2) iterate through the lists creating a job data file and a task for the > queue one at a time until all of the data is dealt with > > My boss reviewed my code and said that it would be more reusable and > Pythonic if I refactored it as a generator that created job data files and > iterated by calling the generator and putting a task on the queue for each > job data file that was obtained. > > This made sense to me, and since the code does a bunch of conversion of the > data in the input file(s) to make it easier and faster to iterate through > the data, I decided to create a class for the generator and put that > conversion code into its __init__ function. So the class looked like this:
It's not a "generator" if you create a class for it. Your class is (trying to be) an iterator. > class JobFileGenerator: > def __init__(self, filedata, output_file_prefix, job_size): > <convert filedata to a more usable form> > > def next(self): > while <there is more data>: > <yield a job data file> next() should return a single item not a generator that yields items. If you perhaps rename the next function as __iter__ then it will be a proper iterator. I suspect however that your boss just wants you to write a single generator function rather than an iterator class. For example: def generate_jobs(): <prepare> while <data>: yield <job> for job in generate_jobs(): <queue job> _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor