【发布时间】:2021-04-30 18:18:33
【问题描述】:
最近我在 Python 中偶然发现了一个 interesting piece of code
condition and 'string1' or 'string2'
我花了一些时间弄清楚它的含义,但最后它是另一种写三元表达式的方式
'string1' if condition else 'string2'
这让我意识到x or y 不会返回 True 或 False,但如果 x 为 True,则返回 x,否则返回 y (Python Docs)。
但是,我不明白 Python 之所以这样设计的原因。我见过一些检查无的用例
y = None
x = y or default
但这可以使用以下方法更轻松、更清晰地实现
x = y if y else default
运行时方面我也看不到好处,因为如果 x 为 False,则需要在某个时候评估 x or y 中的第二项。
就代码可读性而言,我希望bool_test = x or y 包含一个布尔值。
那么总的来说,为什么 Python 是这样设计的?
【问题讨论】:
-
y is None实际上只对显式有用。否则,if y:就足够了。如果你想要一个布尔值,请使用bool() -
这确实是个人(即 Guido van Rossum 的)意见问题。
-
曾有一段时间(2.5 之前)三元运算符
a = b if c else d不可用。像x = y or z这样的速记作为替代。现在很难为这种旧方法找到一个好的理由。 -
@JamieDeith 当时也没有真正的理由。在没有实际条件表达式的情况下,这只是一个大多数但不完全正确的习语。
-
部分你的任务是关于布尔表达式短路 - 例如。
if x() or y():如果x()返回真实的值,那么表达式的其余部分将不会被计算,即y()不会被调用。同样对于if x() and y():,如果x()是假的,那么y()将不会被评估,因为没有意义。
标签: python