我无法理解 5

我无法理解 5

我昨天看到这个问题 Print( 5 <( 5 or 10)) <- 输出是 False Print( 5 <( 10 or 5)) <- 输出是 True 我无法理解它。就像Python如何读取它一样,为什么在一种情况下它是False而在另一种情况下是True。

我的想法是,它并不像乍一看那样是分布式的。 5 <( 5 或 10 ) != 5 < 5 或 5 < 10。

我想知道python如何读取这个函数,以及它的含义是什么。 在此输入图像描述

在此输入图像描述

答案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 )- 分别是FalseTrue

但为什么( 5 or 10 )评估 to5( 10 or 5 )to 呢10?为此,我们咨询了实际情况Python 文档,我们在布尔运算符的相关部分中找到or

表达式x or y首先计算x;如果xTrue它的值被返回;否则,计算 y 并返回结果值。

如果您了解“真实性”在 Python 中的工作原理,那么这是有道理的。对于数值,00.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)是一种简洁的方法。

相关内容