跳转至

空值合并

空值合并运算符乍一看与 or 运算很像,但 a or b 等价于 a if a else b,而 a ?? b 等价于 a if a is None else b。两者之间的区别在于,a ?? b 仅判断空值(None),而 a or b 则判断所有的假值(如:""False0[]{} 等)。

语法

1
a ?? b

优先级

??or 优先级一致。

注意

??or 之间的优先级未确定,故而不能直接链式使用。当你想让 ??or 出现在同一个表达式里,那么你需要给它们外面加上括号,否则会出现抛出一个语法错误。

1
2
3
a or b ?? c    # 语法错误
(a or b) ?? c  # 正确
a or (b ?? c)  # 正确

参考

  • https://peps.python.org/pep-0505/