2010-03-09 13 views
8

पायथन में, आप बूलियन मानों को जोड़ सकते हैं, और यह एक पूर्णांक लौटाएगा। उदाहरण:एक बूलियन मान को संयोजित करने से एक पूर्णांक क्यों लौटाता है?

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

क्यों? यह समझ में क्यों आता है?

मैं समझता हूँ कि True अक्सर जबकि False0 के रूप में प्रस्तुत किया जाता है, 1 के रूप में प्रतिनिधित्व है, लेकिन है कि अभी भी स्पष्ट नहीं होता है कि कैसे एक पूरी तरह से अलग प्रकार देता है एक साथ दो मानों को जोड़ने एक ही प्रकार के।

+3

क्या आपकी अपेक्षाओं को, वैसे भी था? स्केलर प्रकारों के संदर्भ में "concatenate" मतलब क्या है? तर्क परिचालनों के लिए, 'और ',' या', आदि का उपयोग किया जाता है। – Ber

+0

-1: इसके लिए उपयोग केस क्या है? यह बात क्यों है? –

+1

मुझे सच में नहीं पता कि मेरी अपेक्षाएं क्या थीं, लेकिन मुझे निश्चित रूप से ऐसा होने की उम्मीद नहीं थी। –

उत्तर

21

क्योंकि में अजगर, 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 */ 
+2

+1 यह सबसे अच्छा जवाब है। :) –

+0

अद्भुत। ठीक वही जो मेरे द्वारा खोजा जा रहा था –

7

बदलें के रूप में आप जो बोलते हैं उसे "जोड़ें" और 1/0 साथ True/False, है, और यह सही समझ में आता है के साथ "CONCATENATE"।

वाक्य में सही और गलत को सारांशित करने के लिए: वे एक ही अंतर के साथ पूर्णांक मान 1 और 0 का जादू करने के वैकल्पिक तरीके हैं, जो str() और repr() स्ट्रिंग्स 'ट्रू' और ' '1' और '0' के बजाय गलत '।

यह भी देखें: http://www.python.org/dev/doc/maint23/whatsnew/section-bool.html

2
True is 1 
False is 0 
+ is ADD 

से इस प्रयास करें:

IDLE 2.6.4  
>>> True == 1 
True 
>>> False == 0 
True 
>>> 
संबंधित मुद्दे