Почему конкатенация логического значения возвращает целое число? - PullRequest
8 голосов
/ 09 марта 2010

В python вы можете объединять логические значения, и он будет возвращать целое число. Пример:

>>> True
True
>>> True + True
2
>>> True + False
1
>>> True + True + True
3
>>> True + True + False
2
>>> False + False
0

Почему? Почему это имеет смысл?

Я понимаю, что True часто представляется как 1, тогда как False представляется как 0, но это все еще не объясняет, как сложение двух значений одного и того же типа возвращает совершенно другой тип. 1010 *

Ответы [ 3 ]

21 голосов
/ 09 марта 2010

Потому что в Python bool является подклассом / подтипом int.

>>> 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 */
7 голосов
/ 09 марта 2010

Замените "concatenate" на "add", а True / False на 1 / 0, как вы сказали, и это имеет смысл.

Подводя итоги True и False в предложении: это альтернативные способы написания целочисленных значений 1 и 0, с той лишь разницей, что str () и repr () вместо этого возвращают строки «True» и «False» из «1» и «0».

Смотри также: http://www.python.org/dev/doc/maint23/whatsnew/section-bool.html

2 голосов
/ 09 марта 2010
True is 1
False is 0
+ is ADD

Попробуйте это:

IDLE 2.6.4      
>>> True == 1
True
>>> False == 0
True
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...