davea at davea.name
Tue Feb 26 18:05:15 CET 2013
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
>> 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)
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
More information about the Python-list