yield expression
Colin J. Williams
cjw at ncf.ca
Tue Feb 26 13:44:06 EST 2013
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 at ncf.ca
> <mailto:cjw at 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.
More information about the Python-list
mailing list