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