2018-07-29

斐波拉契数列:

def fib(max):

    n, a, b = 0, 0, 1

    while n < max:

        print(b)

        a, b = b, a + b

        n = n + 1

    return 'done'



把fib改为generator函数,只需要把print(b)改为yield b就可以了

def fib(max):

    n, a, b = 0, 0, 1

    while n < max:

        yield b

        a, b = b, a + b

        n = n + 1

    return 'done'



如何捕获生成器中的generator的终止return值;

必须捕获StopIteration错误,返回值包含在StopIteration的value中:

g = fib(6)

>>> while True:

...    try:

...        x = next(g)

...        print('g:', x)

...    except StopIteration as e:

...        print('Generator return value:', e.value)

...        break

...

g: 1

g: 1

g: 2

g: 3

g: 5

g: 8

Generator return value: done

你可能感兴趣的:(2018-07-29)