我最近一直在学习和使用Python,遇到了以下代码,他们告诉我这是Python中三元表达式的常用缩写:
x = condition and expression1 or expression2
现在我熟悉了类C语言中的? :
操作符,以及Python常用的三元表达式x = expression1 if condition else expression2
,但是这个新表达式对我来说有点奇怪。你知道吗
我困惑的一部分是,它似乎不太可读,即当我读到这一行,它并没有立即表明发生了什么,但另一部分是,我不太明白为什么它的工作。你知道吗
综上所述:为什么上面的表达式的功能与类C三元表达式相同?
这在Python中起作用的真正原因是这些操作符是短路的,执行是从左到右的。如果已经有足够的信息来回答布尔表达式,则不会执行其余的操作数。如果
expression1
返回false,这将无法按预期工作,它将执行这两个表达式。你知道吗最常见的用法是只有一个运算符的语句
如果
condition
为true,则使用or
的相关语句将在condition
为false时执行expression
。你知道吗这并不适用于所有语言,例如APL将计算所有操作数。你知道吗
and
运算符返回左操作数(如果左操作数为假),返回右操作数(如果左操作数为真)。你知道吗相反
or
运算符返回左操作数(如果左操作数是真的),返回右操作数(如果左操作数是假的)。你知道吗示例:
正如其他人所指出的,这两种结构并不等同:
and
运算符计算其右操作数(expression1
)的充要条件是左操作数为真。同样地,or
运算符计算其右操作数(expression2
)的充要条件是其左操作数为false。你知道吗因此,如果
condition
为真,则expression1
将被求值。假设它的计算结果是真实的,表达式condition and expression1
将是真的,因此expression2
将不会被计算。你知道吗如果
condition
为false,expression1
将不会得到计算结果,condition and expression1
为false。因此expression2
将被评估。你知道吗唯一的问题是如果
condition
是真的,但是expression1
的计算结果是假的。在这种情况下,expression1
和expression2
都将被评估。所以当这是可能的时候,这个结构就被破坏了。你知道吗相关问题 更多 >
编程相关推荐