yield expression

Ziliang Chen zlchen.ken at gmail.com
Mon Feb 25 01:59:06 CET 2013


On Monday, February 25, 2013 8:51:28 AM UTC+8, Oscar Benjamin wrote:
> On 25 February 2013 00:39, 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
> 
> 
> 
> The value of the yield expression is usually None. yield only returns
> 
> a value if the caller of a generator function sends one with the send
> 
> method (this is not commonly used). The send method supplies a value
> 
> to return from the yield expression and then returns the value yielded
> 
> by the next yield expression. For example:
> 
> 
> 
> >>> g = counter()
> 
> >>> next(g)  # Need to call next() once to suspend at the first yield call
> 
> 0
> 
> >>> g.send('value for count')  # Now we can send a value for yield to return
> 
> 'value for count'
> 
> 
> 
> 
> 
> Oscar

Thanks Oscar !
I am cleared. Only when "send" is used to feed "yield" a new value, the "yield" expression has none "None", otherwise, "yield" expression has "None" value.



More information about the Python-list mailing list