可能重复:
Is False == 0 and True == 1 in Python an implementation detail or is it guaranteed by the language?
我今天注意到以下工作使用python 2.6(Cpython)...
>>> a=[100,200]
>>> a[True]
200
>>> a[False]
100
这是否可移植到其他python实现(例如True
/ False
是否保证从int继承?True
是否保证计算为1而不是其他非零数字? )有什么情况会有用吗?它似乎可以用作三元运算符的另一种形式,但我不知道在那里获得了多少......
答案 0 :(得分:11)
它是part of the language specification,所以任何Python实现应该实现与整数等效的布尔值。
布尔
这些代表真值False和True。表示值False和True的两个对象是唯一的布尔对象。布尔类型是普通整数的子类型,布尔值在几乎所有上下文中的行为分别类似于值0和1,例外的是当转换为字符串时,字符串
"False"
或{{1}分别返回。
答案 1 :(得分:4)
是的 - 这是有保证的 - 警告可以重新分配True
和False
;但这不会影响布尔运算的结果。 (感谢Ignacio的文件证明。)事实上,当没有三元运算符时,这是用来模拟它的方法之一。如今,如果您需要三元运算符,请使用三元运算符。但有时这个结构仍然有用。例如:
>>> even_odd = [[], []]
>>> for i in range(10):
... even_odd[i % 2 == 1].append(i)
...
>>> print even_odd
[[0, 2, 4, 6, 8], [1, 3, 5, 7, 9]]
您也可以使用字典来完成此操作。它有一个等价的三元运算符......
>>> even, odd = [], []
>>> for i in range(10):
... (even if i % 2 == 1 else odd).append(i)
...
>>> even, odd
([1, 3, 5, 7, 9], [0, 2, 4, 6, 8])
但实际上我发现列表索引版本更容易阅读,至少在这种情况下。 YYMV。