Discuss / Python / 请教各位同学

请教各位同学

Topic source

#1 Created at ... [Delete] [Delete and Lock User]
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

请问为什么说这个函数中在循环过程中不断调用yield,会不断中断?这个程序难道不是按照顺序来的吗?在执行yield b语句后接着就会执行a,b=b,a+b这样吗?而且当执行时,例如fib(6),那么在n>6时不就会跳出来吗?同样的使用for循环为什么会取不到return的返回值?谢谢

lucky lucy

#2 Created at ... [Delete] [Delete and Lock User]

不算完全意义上的顺序 生成器函数只能通过next或者for循环来调用每次调用仅会执行到yield语句即暂停,等待下一个调用 而下一次调用会从上一次暂停的语句即yield语句继续执行一直执行到下一个while循环的yield语句 以此类推一直到n=6时结束 而想要取到return需要去捕获对应的异常才能拿到


  • 1

Reply