vbgunz wrote: > OK. I hope my understanding of the yield keyword and generators in a > general sense are now better understood. When a generator function is > assigned to an identifier, no code is executed and a generator is > immediately returned. When the next() method is called on the new > generator, code from top to bottom executes within the generator until > it reaches it's first yield. Many yields can appear within one > generator. When this is the case a next method call will execute code > from yield to yield. Code that appears in a loop after a yield keyword > is executed on the next() method call. > > I hope I got it right. I love you guys for your patience and examples. > It is greatly appreciated and means very much to me! Thank you fellas!
Yep, looks like you have it. ;-) Only need to add what happens if a generator exits the end after the yield(s). If it were a function it would return a None object even if it didn't have a return at the end. But a generator raises a StopIteration Exception. >>> def gen(): ... yield 'hello' ... print 'all done' ... >>> g = gen() >>> g.next() 'hello' >>> g.next() all done Traceback (most recent call last): File "<stdin>", line 1, in ? StopIteration This is the signal to indicate iteration is finished. You don't see it when you are using generators as iterators because it's usually caught by the object or statement using the generator. Cheers, Ron -- http://mail.python.org/mailman/listinfo/python-list