Python斐波那契代码两种变量赋值方式结果差异原因咨询
两种赋值方式结果差异的核心原因
这两种写法的差异本质是Python赋值语句的执行规则不同:
- 第一种是逐行顺序赋值,会提前覆盖
prev的原始值,导致计算逻辑出错 - 第二种是单行多变量同时赋值,会先计算所有右侧表达式的结果再统一赋值,符合斐波那契的计算逻辑
逐行赋值的错误逻辑分析
你写的两行分开赋值代码:
prev = curr # 先执行 curr = curr + prev # 后执行
是按从上到下的顺序逐行执行:
- 第一步先把
prev的值修改为当前的curr值,这时候上一轮的prev原始值已经被完全覆盖丢失 - 第二步计算
curr + prev的时候,prev已经是第一步修改后的新值,相当于每次curr都等于自身原值的2倍,所以最终输出是1 1 2 4 8的等比序列。
举个实际运行的步骤示例(初始prev=1、curr=1):
- 第一轮:prev被赋值为1 → curr = 1 + 1 = 2
- 第二轮:prev被赋值为2 → curr = 2 + 2 =4
- 第三轮:prev被赋值为4 → curr =4 +4=8
和你得到的错误输出完全一致。
单行多变量赋值的正确逻辑分析
Python的单行多变量赋值遵循以下规则:
先计算等号右侧所有表达式的值,全部存入临时缓存后,再按从左到右的顺序赋值给左侧的变量。
你写的正确代码:
prev ,curr = curr, curr + prev
执行过程如下(同样初始prev=1、curr=1):
- 先计算右侧所有表达式的值:第一个值为当前curr的值1,第二个值为当前
curr + prev的结果1+1=2,两个值都存在临时缓存里,不会修改现有变量 - 再把缓存里的两个值依次赋值给左侧的prev和curr:prev=1,curr=2
- 下一轮计算时,prev=1、curr=2,右侧计算得到2、1+2=3,赋值后prev=2、curr=3,完全符合斐波那契序列「后项=前两项之和」的规则,所以输出正确。
内容的提问来源于stack exchange,提问作者Xolani Spelle
相关产品推荐
相关产品推荐

