Python海象运算符(赋值表达式)的求值顺序行为问询
结论
你观察到的运行结果完全符合Python官方定义的表达式从左到右求值规则,属于语言层面的规范行为,可靠性有明确保障,不属于未定义的边界特性。
原理拆解
Python中所有二元运算符的两侧操作数都会严格按照从左到右的顺序依次求值,先计算得到的操作数的值会被临时保存,不会受后续另一侧操作数执行的赋值操作影响:
- 对于
a == (a := b)的执行流程:- 先计算左侧操作数
a,此时a = 3,该值被临时保存 - 再计算右侧操作数
(a := b),执行赋值后a被更新为2,该表达式的求值结果为2 - 用临时保存的左侧值3和右侧求值结果2做相等判断,最终返回
False,运算结束后a的值为2
- 先计算左侧操作数
- 对于
(a := b) == a的执行流程:- 先计算左侧操作数
(a := b),执行赋值后a被更新为2,该表达式的求值结果为2,被临时保存 - 再计算右侧操作数
a,此时a已经被更新为2,求值结果为2 - 两侧值相等,最终返回
True
- 先计算左侧操作数
规范说明
该求值规则是Python原生的基础规则,早于海象运算符的引入就已经存在,PEP-572中只是再次明确海象运算符的加入不会改变原有从左到右的求值顺序。该规则在Python官方语言参考的表达式章节有明确的定义,所有符合标准的Python解释器都会严格遵循该逻辑,不存在兼容性风险。
内容的提问来源于stack exchange,提问作者Mad Physicist
相关产品推荐
相关产品推荐

