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

Python中Fibonacci代码因分行赋值出错的原因解析

为什么你的斐波那契代码和官方版本结果不一样?

嗨~作为刚接触Python和社区的新手,遇到这种变量赋值的坑太正常啦!核心问题就出在Python的并行赋值(同一行赋值)和顺序分行赋值的差异上,我给你拆解清楚:

先看两段代码对比

你的代码(分行赋值)

a, b = 0, 1
while b < 10:
    print(b)
    a = b  # 先把a更新成当前b的值
    b = a + b  # 这里的a已经是新值了,不是原来的a

官方文档的代码(并行赋值)

a, b = 0, 1
while b < 10:
    print(b)
    a, b = b, a + b  # 先计算右边所有值,再一次性赋值给左边

关键差异在哪里?

Python的并行赋值会先把等号右边所有表达式的结果都计算出来,存储到临时空间里,再一次性把这些值赋值给左边的变量。也就是说,a, b = b, a + b里的a + b用的是赋值前的a和b,两者的更新互不干扰。

而你的分行赋值是顺序执行的:

  1. 先执行a = b,这时候a已经变成了当前b的值;
  2. 再执行b = a + b,这里的a已经是新的a(也就是原来的b),所以b变成了b + b(翻倍),而不是斐波那契数列需要的「前两项之和」。

举个具体循环步骤验证

以第一次循环为例:

  • 初始状态:a=0,b=1
  • 你的代码:
    1. 打印1
    2. a = b → a=1
    3. b = a + b → b=1+1=2
  • 官方代码:
    1. 打印1
    2. 先计算右边:b=1,a+b=0+1=1
    3. 一次性赋值:a=1,b=1

继续循环下去,你会发现你的代码输出的是1,2,4,8(翻倍序列),而官方代码输出的是标准斐波那契序列1,1,2,3,5,8。

总结

如果需要基于变量的旧值同时更新多个变量,一定要用Python的并行赋值(同一行多变量赋值),这样能避免因顺序赋值导致的变量值被提前覆盖的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:58:27