Python中三元运算符的模拟工作原理

Python中三元运算符的模拟工作原理,python,python-3.x,Python,Python 3.x,我知道还有其他一些文章讨论如何在Python中模拟三元运算符,但我这里的问题不是如何模拟它,而是为什么这些方法有效 众所周知,模拟三元运算符(条件:if_true?if_false)是由 a if condition else b 然而,至少还有两种方法可以实现这一点,例如 (if_false, if_true)[test] 及 例如 (4, 5)[4 > 5] 给出4 4 > 5 and 4 or 5 给出5这是因为python中的boolean是int的子类。而True是

我知道还有其他一些文章讨论如何在Python中模拟三元运算符,但我这里的问题不是如何模拟它,而是为什么这些方法有效

众所周知,模拟三元运算符(条件:if_true?if_false)是由

a if condition else b
然而,至少还有两种方法可以实现这一点,例如

(if_false, if_true)[test]

例如

(4, 5)[4 > 5]
给出4

4 > 5 and 4 or 5

给出5

这是因为python中的
boolean
int
的子类。而
True
1
,而
False
0
。这被用作元组的索引。 所以

您的第二种方法更难理解:

4 > 5 and 4 or 5
>>> ((4 > 5) and 4) or 5
>>> (False and 4) or 5
>>> False or 5
>>> 5

这一个依赖于这样一个事实,即对真值或假值的
产生值,而不是布尔值

在@khelwood中有很多关于三元运算符的解释,这个问题并不是重复的,因为我在问为什么还有两种其他的方法有效,而你发布的链接只告诉了它们是什么方法。有一些微妙之处,可能一开始会让一些人感到困惑(对我来说)。比较结果将用作访问器
4>5
的计算结果为False,正如您所指出的,它等于0,然后我们访问元组的第0个元素
(4,5)
(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