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


Groups > comp.lang.python > #39988

Re: yield expression

Date 2013-02-26 13:44 -0500
From "Colin J. Williams" <cjw@ncf.ca>
Newsgroups comp.lang.python
Subject Re: yield expression
References <d7760f61-08dd-4186-8844-5f8415773a49@googlegroups.com> <kgio69$5i7$1@theodyn.ncf.ca> <mailman.2556.1361898438.2939.python-list@python.org>
Message-ID <mailman.2564.1361904259.2939.python-list@python.org> (permalink)

Show all headers | View raw


On 26/02/2013 12:07 PM, Vytas D. wrote:
> 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
> <mailto: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>
>
>
Yes, it's very helpful.  Thanks also to the other two responders.

This brings us back to the OP question.  Why not " val = (yield count)"?

Colin W.

Back to comp.lang.python | Previous | NextPrevious 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