为什么这个“andor”三元表达式语法起作用?

2024-09-29 21:34:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近一直在学习和使用Python,遇到了以下代码,他们告诉我这是Python中三元表达式的常用缩写:

x = condition and expression1 or expression2

现在我熟悉了类C语言中的? :操作符,以及Python常用的三元表达式x = expression1 if condition else expression2,但是这个新表达式对我来说有点奇怪。你知道吗

我困惑的一部分是,它似乎不太可读,即当我读到这一行,它并没有立即表明发生了什么,但另一部分是,我不太明白为什么它的工作。你知道吗

综上所述:为什么上面的表达式的功能与类C三元表达式相同?


Tags: orand代码功能if表达式conditionelse
3条回答

这在Python中起作用的真正原因是这些操作符是短路的,执行是从左到右的。如果已经有足够的信息来回答布尔表达式,则不会执行其余的操作数。如果expression1返回false,这将无法按预期工作,它将执行这两个表达式。你知道吗

最常见的用法是只有一个运算符的语句

condition and expression

如果condition为true,则使用or的相关语句将在condition为false时执行expression。你知道吗

这并不适用于所有语言,例如APL将计算所有操作数。你知道吗

and运算符返回左操作数(如果左操作数为假),返回右操作数(如果左操作数为真)。你知道吗

相反or运算符返回左操作数(如果左操作数是真的),返回右操作数(如果左操作数是假的)。你知道吗

示例:

>>> [] and "test"  # [] is falsy
[]
>>> [] or "test"
"test"
>>> "foo" and "bar"  # "foo" is truthy
"bar"
>>> "foo" or "bar"
"foo"

正如其他人所指出的,这两种结构并不等同:

>>> True and 0 or 1
1
>>> 0 if True else 1
0

and运算符计算其右操作数(expression1)的充要条件是左操作数为真。同样地,or运算符计算其右操作数(expression2)的充要条件是其左操作数为false。你知道吗

因此,如果condition为真,则expression1将被求值。假设它的计算结果是真实的,表达式condition and expression1将是真的,因此expression2将不会被计算。你知道吗

如果condition为false,expression1将不会得到计算结果,condition and expression1为false。因此expression2将被评估。你知道吗

唯一的问题是如果condition是真的,但是expression1的计算结果是假的。在这种情况下,expression1expression2都将被评估。所以当这是可能的时候,这个结构就被破坏了。你知道吗

相关问题 更多 >

    热门问题