Python中三元运算符的模拟工作原理
我知道还有其他一些文章讨论如何在Python中模拟三元运算符,但我这里的问题不是如何模拟它,而是为什么这些方法有效 众所周知,模拟三元运算符(条件:if_true?if_false)是由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是
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