是否有关于以下Python条件语法的任何解释?
>>> a = 10
>>> s = (0, 1)[a<10]
>>> print s
0
>>> a = -10
>>> s = (0, 1)[a<10]
>>> print s
1
它似乎像if
语句一样工作。为什么这样做?
答案 0 :(得分:7)
>>> issubclass(bool, int)
True
换句话说,False
等于0,True
等于1:
>>> False == 0
True
>>> True == 1
True
因此它们可以用作索引:
>>> ['No', 'Yes'][False] # ['No', 'Yes'][0]
'No'
>>> ['No', 'Yes'][True] # ['No', 'Yes'][1]
'Yes'
表达式a < 10
根据True
的值产生False
或a
。因此(0, 1)[a < 10]
会相应地产生0
或1
。
答案 1 :(得分:5)
(0, 1)
是一个2元素tuple。您可以使用index accessors [0]
和[1]
来访问其值,如下所示:
>>> (0, 1)[0]
0
>>> (0, 1)[1]
1
现在,在Python中,布尔值True
和False
实际上是int
的实例(因为bool
是int
的子类型):< / p>
>>> issubclass(bool, int)
True
>>> isinstance(True, int)
True
>>> isinstance(False, int)
True
True
和False
的int值为1
和0
:
>>> True == 1
True
>>> False == 0
True
所以你实际上可以使用它们两个访问2元素元组中的元素:
>>> (0, 1)[False]
0
>>> (0, 1)[True]
1
这就解释了为什么在那里指定一个返回布尔值的条件也会起作用。
documentation(强调我的)中也提到了这一点:
布尔值是两个常量对象
False
和True
。它们用于表示真值(尽管其他值也可以被认为是假或真)。 在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别与整数0和1相似。