答案1
如果您看到一行(或一组行)代码并想了解它们为什么这样做,一个好的策略是将这些行分解为组成部分。您很好奇为什么这些行返回不同的结果:
>>> print( 5 < ( 5 or 10 ) )
False
>>> print( 5 < ( 10 or 5 ) )
True
那么我们来把它分开吧。这些代码行唯一不同的是括号表达式( 5 or 10 )
和( 10 or 5 )
,所以让我们看看 Python 如何处理它们:
>>> ( 5 or 10 )
5
>>> ( 10 or 5 )
10
至此,应该清楚为什么两个print()
语句的输出不同:它们实际上是print( 5 < 5 )
和print( 5 < 10 )
- 分别是False
和True
。
但为什么( 5 or 10 )
评估 to5
和( 10 or 5 )
to 呢10
?为此,我们咨询了实际情况Python 文档,我们在布尔运算符的相关部分中找到or
:
表达式
x or y
首先计算x
;如果x
是True
,它的值被返回;否则,计算 y 并返回结果值。
如果您了解“真实性”在 Python 中的工作原理,那么这是有道理的。对于数值,0
和0.0
是假值(即在布尔运算中计算为 的值False
),而任何其他值都是真值(即计算为True
)。 5 和 10 都不是假值,因此在每个括号中,都会返回第一个值,因为该值本身True
在布尔测试中仍会计算为:
>>> x = 5
>>> if x:
... print( f'{x} is truthy enough for me!' )
...
5 is truthy enough for me!
在潜在的用例中,这允许以or
类似于 SQL 的方式工作COALESCE()
(即返回第一个非假值)。您是否应该有一组变量,其中每个变量可以以对您的程序有效的方式设置为真实值,并且您希望优先考虑使用哪个值,那么这(x or y or z)
是一种简洁的方法。