为什么连接布尔值会返回一个整数?

时间:2010-03-09 05:55:02

标签: python

在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返回完全不同的类型。

3 个答案:

答案 0 :(得分:21)

因为在Python中,boolint的子类/子类型。

>>> issubclass(bool,int)
True

<强>更新

来自boolobject.c

/* 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
>>>