In article <551e2cfd$0$11123$c3e8...@news.astraweb.com>, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: >On Wednesday 01 April 2015 00:18, Albert van der Horst wrote: > >> In article <55062bda$0$12998$c3e8da3$54964...@news.astraweb.com>, >> Steven D'Aprano <steve+comp.lang.pyt...@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@spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst -- https://mail.python.org/mailman/listinfo/python-list