You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何两段Python生成器实现的斐波那契代码输出截然不同?

为什么两段生成器实现的斐波那契代码输出截然不同?

这两段是完全不同的代码,核心差异在于变量更新的逻辑,直接导致了输出序列的天差地别:

代码1的问题:分步赋值导致递推逻辑错误

代码1中更新a和b的语句是分步执行的:

a = b
b = a + b

每次执行时,a会先被替换成b的当前值,之后计算b时,使用的是更新后的a,而非最初的a值。举个具体的循环过程:

  • 初始:a=0,b=1,第一次yield 0
  • 赋值后:a=1,b=1+1=2
  • 第二次yield 1,赋值后:a=2,b=2+2=4
  • 以此类推,每次b都会变成自身的2倍,最终输出的是2^0, 2^1, 2^2...的等比序列。

代码2的正确逻辑:并行赋值实现斐波那契递推

代码2使用了Python的并行赋值(元组解包):

a, b = b, a + b

这种赋值方式会先计算右侧所有表达式的值(使用a和b的旧值),再一次性把结果赋值给左侧变量。循环过程:

  • 初始:a=0,b=1,第一次yield 0
  • 右侧先计算:b=1,a+b=0+1=1,再赋值给a和b,得到a=1,b=1
  • 第二次yield 1,右侧计算:b=1,a+b=1+1=2,赋值后a=1,b=2
  • 第三次yield 1,以此类推,完全符合斐波那契数列“每个数等于前两个数之和”的定义。

简单来说,代码1的递推逻辑是b = 2*b,代码2的递推逻辑是b = 旧a + 旧b,这就是输出差异的根本原因。

内容的提问来源于stack exchange,提问作者CKJ_1630

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:33:19