This means that  '...' should generally contain a manipulator then yield
generates from where it stopped...*getting it*
Thanks for the explanation though! Its seems so simple to digest. Thank
you...
On May 28, 2014 1:09 AM, "Danny Yoo" <d...@hashcollision.org> wrote:

> On Tue, May 27, 2014 at 12:27 PM, Degreat Yartey
> <yarteydegre...@gmail.com> wrote:
> > I am studying python on my own (i.e. i am between the beginner and
> > intermediate level) and i haven't met any difficulty until i reached the
> > topic 'Generators and Iterators'.
> > I need an explanation so simple as using the expression 'print ()', in
> this
> > case 'yield'.
>
>
> You can think of a generator as almost like a function, except it can
> return, not just once, but multiple times.
>
>
> Because it can return multiple times, if we squint at it enough, it
> acts like a _sequence_, just like the other sequence-like things in
> Python like files and lists and tuples.  That is, as a sequence, it's
> something that we can walk down, element by element.  We can loop over
> it.
>
>
> For example, let's say that we wanted to represent the same sequences
> as that of range(5).  Here's one way we can do it with a generator:
>
> #################
> def upToFive():
>     yield 0
>     yield 1
>     yield 2
>     yield 3
>     yield 4
> #################
>
>
> Let's try it.
>
> #################
> >>> sequence = upToFive()
> >>> next(sequence)
> 0
> >>> next(sequence)
> 1
> >>> next(sequence)
> 2
> >>> next(sequence)
> 3
> >>> next(sequence)
> 4
> >>> next(sequence)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> StopIteration
> >>>
> >>>
> >>> for x in upToFive():
> ...     print("I see %d" % x)
> ...
> I see 0
> I see 1
> I see 2
> I see 3
> I see 4
> #################
>
>
> Now this is a toy example.  If we wanted range(5), we'd just say
> "range(5)" and be done with it.
>
>
> What's neat about generators is that they make it easy to build these
> sequences while pretending that we're writing a plain function.  All
> of the even numbers, for examples, is a sequence that we can make with
> a generator:
>
> #################
> def onlyEvens():
>     n = 0
>     while True:
>         yield n
>         n = n + 2
> #################
>
>
> Let's try running it:
>
> #################
> >>> sequence = onlyEvens()
> >>> next(sequence)
> 0
> >>> next(sequence)
> 2
> >>> next(sequence)
> 4
> >>> next(sequence)
> 6
> #################
>
> And note that this sequence doesn't stop!  We can keep calling next()
> on it and it will continue to run.
>
>
> We _can_ write a loop to run over such infinite sequences, but we'll
> also have to make sure to stop it manually: it won't exhaust
> otherwise, so doing something like:
>
> #################
> for n in onlyEvens():
>     ...
> #################
>
> better have something in the "..." that interrupts or returns, or else
> that loop will never end.
>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to