At 12:31 PM 10/10/2006, Marc Poulin wrote: >--- Dick Moores <[EMAIL PROTECTED]> wrote: > > > > Andrei's > > Write your own iterator: > > >>> def hugerange(minval, maxval): > > ... val = minval > > ... while val < maxval: > > ... yield val > > ... val += 1 > > > > All 3 are essentially the same, aren't they. Which > > makes me feel even > > dumber, because I don't understand any of them. I've > > consulted 3 > > books, and still don't understand the use of yield. > > > >This is an example of a "coroutine". >See http://en.wikipedia.org/wiki/Coroutine > >def hugerange(minval, maxval): > val = minval > while val < maxval: > yield val > ### return value of "val" to calling routine > ### at this point and place > ### hugerange() function temporarily > ### on hold ... > ### > ### next call to hugerange() > ### resumes at this point with > ### all previous variable values > ### still intact ... > val += 1
Ah, it's beginning to make sense. However, it seems there's a need to do this because the while loop is inside a function (made generator). The while loop of mine in <http://www.rcblue.com/Python/1histogram-5a-ForWeb.txt> is not in a function, so it seems I don't need a generator. Am I correct? I have a real interest in speed, however, and being forced to use the while loop for k larger than 2**31-1 really slows things down. It seems a while loop is about 20% slower than an equivalent for loop. Would using a generator be a help speedwise? I suspect it wouldn't. How about it? Thanks very much, Marc. Dick _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor