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

Python单行多变量赋值执行顺序疑问——以斐波那契代码为例

嘿,我来帮你把这个问题掰扯明白!

先搞懂Python多变量赋值的核心机制

你之前猜的两种执行顺序都不对,因为Python里的单行多变量赋值是先一次性计算等号右边所有表达式的值,再把这些值分别赋值给左边的变量,不是按顺序逐个赋值的。也就是说,a, b = b, a+b这行代码里,右边的b和a+b会先被计算出来(用的是赋值前的a和b的值),然后再把这两个结果分别赋给a和b。

手动模拟fib2函数的执行过程

我们把代码贴出来,一步步走一遍,你就清楚开头的1 1 2 3是怎么来的了:

def fib2(n): 
    # return Fibonacci series up to n
    result = [] 
    a, b = 0, 1 
    while b < n: 
        result.append(b) 
        a, b = b, a+b 
    return result

当n=1000时,执行步骤:

  1. 初始状态:a=0,b=1,result=[]
  2. 第一次进入循环(b=1 < 1000成立):
    • result.append(b) → result变成[1]
    • 执行a, b = b, a+b:先算右边,b当前是1,a+b是0+1=1;然后把这两个值赋给左边,所以a=1,b=1
  3. 第二次进入循环(b=1 < 1000成立):
    • result.append(b) → result变成[1, 1]
    • 执行a, b = b, a+b:右边计算得1和1+1=2;赋值后a=1,b=2
  4. 第三次进入循环(b=2 < 1000成立):
    • result.append(b) → result变成[1, 1, 2]
    • 执行a, b = b, a+b:右边计算得2和1+2=3;赋值后a=2,b=3
  5. 第四次进入循环(b=3 < 1000成立):
    • result.append(b) → result变成[1, 1, 2, 3]
    • 继续执行后续步骤,就得到你看到的完整数列了
为什么你的两种猜测都不对?

你之前想的两种顺序都是逐个赋值,但Python不是这么玩的:

  • 第一种:a = b → a=1,然后b = a+b → b=1+1=2,这样第二次循环append的是2,开头就变成1,2,和实际结果不符
  • 第二种:b = a+b → b=0+1=1,然后a = b → a=1,这一步看似和正确结果一样,但如果继续往下走,第三次循环时a=1,b=1,执行b=a+b会得到2,a=b得到2,那第三次append的是2,然后b=2+2=4,接下来append的是4,数列就变成1,1,2,4,明显不对

所以核心就是记住:Python的多变量赋值是“先算全右边,再一次性赋值左边”,不会在赋值过程中用新值覆盖旧值影响计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:00:51