我知道还有其他文章讨论如何在Python中模拟三元运算符,但是我在这里的问题不是我如何模拟它,但是为什么这些方式有效< / strong>。
众所周知,模拟三元运算符(条件:if_true?if_false)是由
完成的a if condition else b
但是,至少还有另外两种方法可以实现这一目标,例如
(if_false, if_true)[test]
和
(expression) and (if_true) or (if_false)
例如
(4, 5)[4 > 5]
给予4
4 > 5 and 4 or 5
给予5
答案 0 :(得分:4)
这是因为python中的boolean
是int
的子类。并且True
是1
,而False
是0
。这被用作元组的索引。
所以,
(4, 5)[4 > 5]
>>> (4, 5)[False]
>>> (4, 5)[0]
>>> 4
您的第二种方法更难读:
4 > 5 and 4 or 5
>>> ((4 > 5) and 4) or 5
>>> (False and 4) or 5
>>> False or 5
>>> 5
这一事实基于这样一个事实,即and
和or
基于真y或假y值会产生该值,而不是布尔值。