Ehsan wrote:
hi
coulde any one show me the usage of "yield" keyword specially in this
example:
"""Fibonacci sequences using generators
This program is part of "Dive Into Python", a free Python book for
experienced programmers. Visit http://diveintopython.org/ for the
latest version.
"""
__author__ = "Mark Pilgrim (ma**@diveintopython.org)"
__version__ = "$Revision: 1.2 $"
__date__ = "$Date: 2004/05/05 21:57:19 $"
__copyright__ = "Copyright (c) 2004 Mark Pilgrim"
__license__ = "Python"
def fibonacci(max):
a, b = 0, 1
while a < max:
yield a
a, b = b, a+b
for n in fibonacci(1000):
print n,
A function body with at least one yield expression (formerly a yield
statement) in its body returns a generator when called:
>>def gen(i):
.... for k in range(i):
.... yield k*k
....
>>g = gen(3)
g
<generator object at 0x7ff2822c>
>>>
The same function can be called multiple times to create independent
generators - the particular example I have given created a generator for
a given number of squares.
The generator can be used in an iterative context (such as a for loop),
but in actual fact it observes the Python iterator protocol, so the
generator has a .next() method, which can be used to extract the next
value from it. Calling the .next() method runs the generator until a
yield expression is encountered, and the value of the yield expression
is the return value of the next method:
>>g.next()
0
>>g.next()
1
>>g.next()
4
When the generator function terminates (either with a return statement
or by dropping off the end) it raises a StopIteration exception. This
will terminate an iteration, but in other contexts it can be handled
just like any other exception:
>>g.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
So the fibonacci example you quote is a generator function that will
yield a sequence of Fibonacci numbers up to but not including the value
of its argument.
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd
http://www.holdenweb.com
Skype: holdenweb
http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------