On 02/26/2013 11:34 AM, Colin J. Williams wrote:
On 24/02/2013 7:36 PM, Ziliang Chen wrote:
Hi folks,
When I am trying to understand "yield" expression in Python2.6, I did
the following coding. I have difficulty understanding why "val" will
be "None" ? What's happening under the hood? It seems to me very time
the counter resumes to execute, it will assign "count" to "val", so
"val" should NOT be "None" all the time.
Thanks !
code snippet:
----
def counter(start_at=0):
count = start_at
while True:
val = (yield count)
if val is not None:
count = val
else:
print 'val is None'
count += 1
Perhaps it's becaoue (teild count) is a statement. Statements do not
return a value.
Colin W.
'yield count' is a yield_expression, not always a statement. If it were
the first thing in a statement, it'd be a yield_stmt
See the docs: http://docs.python.org/2/reference/simple_stmts.html
assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)
and http://docs.python.org/2/reference/expressions.html
yield_atom ::= "(" yield_expression ")"
yield_expression ::= "yield" [expression_list]
The value produced by the yield expression is produced by a.send()
method. This allows an approximation to coroutines.
I believe this dual usage of yield started in Python 2.5
--
DaveA
--
http://mail.python.org/mailman/listinfo/python-list