On Wed, 2006-11-15 at 09:13 -0800, Mateuszk87 wrote: > Hi. > > may someone explain "yield" function, please. how does it actually work > and when do you use it?
[There is probably a much better explanation of this somewhere on the net already, but I feel like writing this out myself.] "yield" is a keyword. In simple terms, if "yield" appears inside a function, the function becomes a generator that can return multiple results. Consider the following trivial example of a function that calculates the elements of some sequence and prints each one. def squares(n): for i in range(n): print i**2 Now suppose it turns out that in addition to--or instead of--printing the elements of this sequence, the caller wants to do something different with them. You could handle this by building a list, and return the list to the caller to loop over and operate on as they choose. But if the list is very big, that's not very memory-efficient if the caller only needs to operate on one element at a time. This is where yield comes in. If you write this: def squares(n): for i in range(n): yield i**2 squares is now a generator function. If you call squares(100), it won't calculate any sequence elements immediately. It will instead return an iterator the caller can loop over: for el in squares(100): print el # or do anything else the caller decides The beauty of this is that you achieve physical separation between generating elements of a sequence and using them. The generator function only cares about how to produce the elements, and the caller only cares about how to use them. Hope this helps, Carsten. -- http://mail.python.org/mailman/listinfo/python-list