generator/coroutine terminology
Albert van der Horst
albert at spenarnc.xs4all.nl
Sat Apr 18 13:52:48 EDT 2015
In article <551e2cfd$0$11123$c3e8da3 at news.astraweb.com>,
Steven D'Aprano <steve+comp.lang.python at pearwood.info> wrote:
>On Wednesday 01 April 2015 00:18, Albert van der Horst wrote:
>
>> In article <55062bda$0$12998$c3e8da3$5496439d at news.astraweb.com>,
>> Steven D'Aprano <steve+comp.lang.python at pearwood.info> wrote:
>
>>>The biggest difference is syntactic. Here's an iterator which returns a
>>>never-ending sequence of squared numbers 1, 4, 9, 16, ...
>>>
>>>class Squares:
>>> def __init__(self):
>>> self.i = 0
>>> def __next__(self):
>>> self.i += 1
>>> return self.i**2
>>> def __iter__(self):
>>> return self
>>
>> You should give an example of usage. As a newby I'm not up to
>> figuring out the specification from source for
>> something built of the mysterious __ internal
>> thingies.
>> (I did experiment with Squares interactively. But I didn't get
>> further than creating a Squares object.)
>
>
>Ah, sorry about that!
>
>Usage is:
>
>it = Squares() # create an iterator
>print(next(it)) # print the first value
>x = next(it) # extract the second
>while x < 100:
> print(x)
> x = next(it)
>
>
>Beware of doing this:
>
>for x in Squares():
> print(x)
>
>since Squares is an *infinite* generator, it will continue for ever if you
>let it. Fortunately you can hit Ctrl-C to interrupt the for loop at any
>point.
>
>In Python 2, you will need to rename __next__ to just next without the
>double-leading-and-trailing underscores.
>
>
>>>Here's the same thing written as a generator:
>>>
>>>def squares():
>>> i = 1
>>> while True:
>>> yield i**2
>>> i += 1
>
>And for this one:
>
>it = squares() # create the iterator
>print(next(it)) # print the first value
>x = next(it) # extract the second
>while x < 100:
> print(x)
> x = next(it)
>
>
>Usage is pretty much exactly the same.
Thanks, I get it now. next and yield are more or less
switching between coroutines.
>
>
>--
>Steve
>
--
Albert van der Horst, UTRECHT,THE NETHERLANDS
Economic growth -- being exponential -- ultimately falters.
albert at spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst
More information about the Python-list
mailing list