Screwing Up looping in Generator
Deborah Swanson
python at deborahswanson.net
Tue Jan 3 01:05:12 EST 2017
Chris Angelico wrote, on January 03, 2017 3:35 PM
>
> On Wed, Jan 4, 2017 at 10:05 AM, Deborah Swanson
> <python at deborahswanson.net> wrote:
> > Ok, I learned how to use generators in Python 2.7.8, which may be
> > different from Python 3 for generators. But I learned from MIT's
> > online introduction to python course, and they certainly
> seem to know
> > python well. So what is the correct way to call the
> generator's next
> > yield in Python 3? We only learned to use the next function. If you
> > don't use the next function, what do you use?
>
> The built-in next function, not the next method.
>
> # don't do this
> gen.next()
>
> # do this
> next(gen)
>
> ChrisA
You speak the truth! I never doubted, but since I still have 2.7.8 on my system
I decided to try it out.
For a simple little Fibbonacci number generator:
def genFib ():
fibn_1 = 1 #fib(n-1)
fibn_2 = 0 #fib(n-2)
while True:
# fib(n) = fib(n-1) + fib(n-2)
next = fibn_1 + fibn_2
yield next
fibn_2 = fibn_1
fibn_1 = next
and at the console:
>>> fib = genFib()
>>> fib.next()
2.7.8 works, and cranks out as many Fibbonacci numbers as you could want.
But in 3.4.3 you get:
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
fib.next()
AttributeError: 'generator' object has no attribute 'next'
Then, going the other way, next(fib) works in both versions.
More information about the Python-list
mailing list