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