Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #39974

Re: yield expression

References <d7760f61-08dd-4186-8844-5f8415773a49@googlegroups.com> <kgio69$5i7$1@theodyn.ncf.ca>
Date 2013-02-26 17:07 +0000
Subject Re: yield expression
From "Vytas D." <vytasd2013@gmail.com>
Newsgroups comp.lang.python
Message-ID <mailman.2556.1361898438.2939.python-list@python.org> (permalink)

Show all headers | View raw


[Multipart message — attachments visible in raw view] - view raw

Hi,

You are using "yield" incorrectly. "yield" works like return, but it can
return more than once from the same function. Functions that "yield"
produce a so called "generator" object. This generator object gives you
values every time you call it.

The generator works very interesting way. It starts like normal function
and goes until it finds "yield" and returns the value. The state of
generator is saved - it is like it is put to sleep until you call it again.
So the next time you call generator() it runs from the point it returned
last time and will return you another value.

Simple sample of making and using generator (prints forever, so just kill
with CTRL+C).

def counter(start_at=0):
    """Returns integer each time called"""

    count = start_at
    while True:
        yield count
        count += 1

def main():
    generator = counter()

    while True:
        print(next(generator))


if __name__ == '__main__':
    main()


Hope helps.

Vytas D.



On Tue, Feb 26, 2013 at 4:34 PM, Colin J. Williams <cjw@ncf.ca> 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.
>
>>
>>
> --
> http://mail.python.org/**mailman/listinfo/python-list<http://mail.python.org/mailman/listinfo/python-list>
>

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

yield expression Ziliang Chen <zlchen.ken@gmail.com> - 2013-02-24 16:36 -0800
  Re: yield expression "Colin J. Williams" <cjw@ncf.ca> - 2013-02-26 11:34 -0500
    Re: yield expression Ian Kelly <ian.g.kelly@gmail.com> - 2013-02-26 09:50 -0700
    Re: yield expression Dave Angel <davea@davea.name> - 2013-02-26 12:05 -0500
    Re: yield expression "Vytas D." <vytasd2013@gmail.com> - 2013-02-26 17:07 +0000
      Re: yield expression "Colin J. Williams" <cjw@ncf.ca> - 2013-02-26 13:44 -0500
        Re: yield expression Dave Angel <davea@davea.name> - 2013-02-26 21:59 -0500
      Re: yield expression "Colin J. Williams" <cjw@ncf.ca> - 2013-02-26 13:44 -0500

csiph-web