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

Reply via email to