为何Python需引入海象运算符(:=)而非直接使用赋值运算符(=)?
:=而非直接让=作为表达式? Python 3.8引入的海象运算符:=,能让你在表达式里完成赋值并直接使用结果,比如:
if a := 2 + 3: print(a) # 输出5
而你疑惑的为什么不直接把现有赋值运算符=改成表达式(比如if a = 2 + 3:),核心原因有这几点:
防止手误引发的致命bug:
这是最关键的一点。Python一直把=作为赋值语句,==作为比较运算符。如果允许=在if、while这类条件里当表达式用,很容易把if x == 5:不小心写成if x = 5:——后者会直接把5赋值给x,然后因为5是真值,条件永远成立,这种逻辑错误排查起来非常麻烦。海象运算符是显式的赋值表达式,你写:=就明确表示“我就是要在这里赋值并拿结果用”,不会和比较操作搞混。符合Python“显式优于隐式”的设计哲学:
Python的语法一直追求清晰可读。如果让=身兼赋值语句和表达式两职,在复杂代码里会让意图变得模糊。比如if (a = get_value()) > 10:,新手可能会疑惑这到底是赋值还是打错了的比较。而if (a := get_value()) > 10:一眼就能看懂:先调用get_value()赋值给a,再判断a是否大于10。避免破坏现有代码生态:
Python已经有几十年的积累,海量现有代码依赖“赋值是语句”这个规则。如果突然修改=的语义,把它变成表达式,那些原本因为if a = b:触发语法错误的代码,会变成合法但逻辑错误的代码,这会导致大量旧代码出现不可预见的问题。新增一个独立的运算符,既能实现赋值表达式的功能,又完全不会影响旧代码的运行。
内容的提问来源于stack exchange,提问作者Randy Sugianto 'Yuku'

