Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the result of a yield expression in Python?

I know that yield turns a function into a generator, but what is the return value of the yield expression itself? For example:

def whizbang():      for i in range(10):          x = yield i 

What is the value of variable x as this function executes?

I've read the Python documentation: http://docs.python.org/reference/simple_stmts.html#grammar-token-yield_stmt and there seems to be no mention of the value of the yield expression itself.

like image 288
slacy Avatar asked May 22 '12 03:05

slacy


People also ask

What does yield return in Python?

Yield is a keyword in Python that is used to return from a function without destroying the states of its local variable and when the function is called, the execution starts from the last yield statement. Any function that contains a yield keyword is termed a generator.

Why do we use yield in Python?

yield in Python can be used like the return statement in a function. When done so, the function instead of returning the output, it returns a generator that can be iterated upon. You can then iterate through the generator to extract items.

How is yield implemented in Python?

The yield instruction takes the current executing context as a closure, and transforms it into an own living object. This object has a __iter__ method which will continue after this yield statement. So the call stack gets transformed into a heap object.

What is expression yield?

Expression yields typically are expressed as the amount of product obtained, per unit time, per fermentation volume. From: Encyclopedia of Food Microbiology (Second Edition), 2014.


1 Answers

You can also send values to generators. If no value is sent then x is None, otherwise x takes on the sent value. Here is some info: http://docs.python.org/whatsnew/2.5.html#pep-342-new-generator-features

>>> def whizbang():         for i in range(10):             x = yield i             print 'got sent:', x   >>> i = whizbang() >>> next(i) 0 >>> next(i) got sent: None 1 >>> i.send("hi") got sent: hi 2 
like image 61
jamylak Avatar answered Oct 14 '22 14:10

jamylak