Python斐波那契生成器序列

Python斐波那契生成器序列,python,fibonacci,yield,Python,Fibonacci,Yield,我目前正在学习Python,对斐波那契数生成器有点着迷。经过几个小时的研究,我没有取得多大进展。我在某种程度上理解了输出,只是在我知道每次迭代都会发生什么之前,我不愿意转移到另一个主题 def fibonacci_generator() : a , b = 0 , 1 while True : yield a a , b = b , a + b fib = fibonacci_generator()

我目前正在学习Python,对斐波那契数生成器有点着迷。经过几个小时的研究,我没有取得多大进展。我在某种程度上理解了输出,只是在我知道每次迭代都会发生什么之前,我不愿意转移到另一个主题

    def fibonacci_generator() :
        a , b = 0 , 1
        while True :
            yield a
            a , b = b , a + b

    fib = fibonacci_generator() 

    for i in fib :
        if i > 100 :
            break
        else :
            print( 'Generated:' , i )
运行此代码后,我看到以下输出

    Generated: 0
    Generated: 1
    Generated: 1
    Generated: 2
    Generated: 3
    Generated: 5
    Generated: 8
    Generated: 13
    Generated: 21
    Generated: 34
    Generated: 55
    Generated: 89
根据这里关于堆栈溢出的几个类似问题的答案,我确实理解第一次调用生成器时,a和be分别被初始化为0和1,然后带有yield语句(a=0)的值返回给调用方

为了节省一点时间,把事情弄清楚,我们有几个问题要问

  • 在第一次迭代中,唯一出现的是a的初始值的返回吗?它是否完全停止在收益率

  • 在第二次迭代中,它从哪里得到1?如果a,b=b,那么a+b将是1+1,那么为什么第二个值不返回为2呢

  • 我也不确定1的相同值是如何返回两次的


  • 总而言之,我想知道每行输出的具体操作是什么。我脑子里似乎想不清那部分。让我重申一下,我已经在很多不同的地方看过了,但我所看到的都没有帮助。

    作为背景,fibonacci_生成器是一个生成器函数,它返回一个生成器,实际上只是一个迭代器对象

    在第一次迭代中,生成器生成一个,并在那里停止,直到您再次调用它。再次调用后,它会重新计算a和b,因为这是真的,所以进入循环,并生成重新计算的a。它只是不断重复这个过程

    关于第二和第三个问题:

    每当有赋值语句时,在赋值语句的右侧完成之前,左侧的变量不会被赋值

    因此,

    a,b=b,a+b

    当您计算
    a+b
    时,
    a
    不等于
    b
    ,但它等于原来的值。换句话说,
    a,b=b,a+b
    相当于:

    temp = a
    a = b
    b = temp + b
    
    如果您遵循这个逻辑,您将理解为什么代码的行为方式是这样的