在python中,你可以连接布尔值,它会返回一个整数。例如:
>>> True
True
>>> True + True
2
>>> True + False
1
>>> True + True + True
3
>>> True + True + False
2
>>> False + False
0
为什么呢?为什么这有意义?
我了解True
通常表示为1
,而False
表示为0
,但仍未解释如何将两个值相加type返回完全不同的类型。
答案 0 :(得分:21)
因为在Python中,bool
是int
的子类/子类型。
>>> issubclass(bool,int)
True
<强>更新强>:
/* Boolean type, a subtype of int */
/* We need to define bool_print to override int_print */
bool_print
fputs(self->ob_ival == 0 ? "False" : "True", fp);
/* We define bool_repr to return "False" or "True" */
bool_repr
...
/* We define bool_new to always return either Py_True or Py_False */
...
// Arithmetic methods -- only so we can override &, |, ^
bool_as_number
bool_and, /* nb_and */
bool_xor, /* nb_xor */
bool_or, /* nb_or */
PyBool_Type
"bool",
sizeof(PyIntObject),
(printfunc)bool_print, /* tp_print */
(reprfunc)bool_repr, /* tp_repr */
&bool_as_number, /* tp_as_number */
(reprfunc)bool_repr, /* tp_str */
&PyInt_Type, /* tp_base */
bool_new, /* tp_new */
答案 1 :(得分:7)
将“concatenate”替换为“add”,将True
/ False
替换为1
/ 0
,正如您所说,这非常有意义。
总结句子中的真与假:它们是拼写整数值1和0的替代方法,唯一的区别是str()和repr()返回字符串'True'和'False'而不是'1'和'0'。
另请参阅:http://www.python.org/dev/doc/maint23/whatsnew/section-bool.html
答案 2 :(得分:2)
True is 1
False is 0
+ is ADD
试试这个:
IDLE 2.6.4
>>> True == 1
True
>>> False == 0
True
>>>