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 ([EMAIL PROTECTED])" > __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 ------------- -- http://mail.python.org/mailman/listinfo/python-list