आप हैरान हैं, तो क्यों bool
एक वैध सूचकांक तर्क है: बस तथ्य यह है कि bool
int
का एक उपवर्ग है और अजगर में यह एक संख्यात्मक प्रकार है के साथ स्थिरता के लिए इस है।
यदि आप पूछ रहे हैं क्यों bool
पहले स्थान पर है तो आप यह समझना होगा कि bool
अजगर की पुरानी विज्ञप्ति में मौजूद नहीं थे और लोगों के बजाय int
रों इस्तेमाल किया है में एक संख्यात्मक प्रकार है।
मैं ऐतिहासिक बहस का एक सा जोड़ देगा। पाइथन में bool
के सभी जोड़े में सबसे पहले गिडो वैन रॉसम (उर्फ बीडीएफएल) ब्लॉगपोस्ट में वर्णित है: The History of Python: The history of bool
, True
and False
। प्रकार PEP 285 के माध्यम से जोड़ा गया था।
पीईपी में वास्तविक तर्कसंगत इस निर्णय के लिए उपयोग किए गए तर्कसंगत हैं। मैं नीचे पीईपी के कुछ हिस्सों का उद्धरण दूंगा।
4) हम भविष्य में bools पर गैर बूलियन आपरेशन समाप्त करने के लिए प्रयास करना चाहिए, उपयुक्त चेतावनी के माध्यम से, ताकि उदाहरण True+1
के लिए अंत में (अजगर 3000 में) अवैध हो सकता है?
=> सं
वहाँ एक छोटी लेकिन मुखर अल्पसंख्यक कि "पाठ्यपुस्तक" bools कि सब पर अंकगणितीय आपरेशनों का समर्थन नहीं करते देखने के लिए पसंद करेंगे, लेकिन सबसे समीक्षक मेरे साथ सहमत हैं कि bools हमेशा चाहिए अंकगणितीय परिचालन की अनुमति दें।
6) bool
int
से विरासत चाहिए?
=> हां।
एक आदर्श दुनिया में, bool
बेहतर एक अलग पूर्णांक प्रकार जानता है कि कैसे मिश्रित मोड प्रदर्शन करने के लिए गणित के रूप में लागू किया जा सकता है। हालांकि, bool
int
से इनहेरिट (- इस int
की उपवर्गों के लिए सच रिटर्न सब सी कोड कहता है कि PyInt_Check()
काम करना जारी रखेंगे के बाद से भाग में) कार्यान्वयन काफी आसान बनाता है। इसके अलावा, मेरा मानना है कि इस बात का प्रतिस्थापन मामले में सही है: कि एक int
की आवश्यकता है कोड एक bool
खिलाया जा सकता है और यह 0
या 1
रूप में एक ही व्यवहार करेगा। कोड जो bool
की आवश्यकता होती है जब इसे int
दिया जाता है; उदाहरण के लिए, 3 0 है, लेकिन सत्य मानों के रूप में माना जाने पर 3 और 4 दोनों सत्य हैं।
क्योंकि int
से bool
इनहेरिट करती है, True+1
वैध है और 2
के बराबर होती है, और इतने पर। पिछली संगतता के लिए यह महत्वपूर्ण है: क्योंकि तुलना और वर्तमान में पूर्णांक मान वापस लौटने पर, कोई मानों के मौजूदा अनुप्रयोगों का उपयोग करने के तरीके के बारे में बताए जाने का तरीका नहीं है।
पश्च संगतता की वजह से, bool प्रकार कई गुण है कि कुछ देखना चाहेंगे का अभाव है। उदाहरण के लिए, अंकगणित एक या दो बूल तर्कों के साथ संचालन की अनुमति है, का इलाज 0 के रूप में गलत और 1 के रूप में सही है। इसके अलावा, एक बूल का उपयोग अनुक्रम अनुक्रमणिका के रूप में किया जा सकता है।
मुझे इसे एक समस्या के रूप में नहीं दिख रहा है, और मैं इस दिशा में भाषा विकसित नहीं करना चाहता हूं। मुझे विश्वास नहीं है कि "बूलियननेस" की कठोर व्याख्या भाषा को स्पष्ट बनाता है।
सारांश:
- अनुकूलता पिछड़ों: वहाँ कोड के बहुत सारे है कि पहले से ही इस्तेमाल किया
int
रों 0
और 1
False
और True
प्रतिनिधित्व करने के लिए था और इसके बारे में कुछ संख्यात्मक में उन मूल्यों का इस्तेमाल किया संगणना।
- यह एक बड़ी बात के रूप में नहीं देखा गया था एक "गैर-पाठ्यपुस्तक"
bool
प्रकार लोगों की
- बहुत पायथन समुदाय में चाहता था इन सुविधाओं
- BDFL ऐसा कहा है।
([यहाँ उदाहरण के एक गुच्छा है] http://www.petercollingridge.co.uk/python-tricks/boolean -indices)। –
कोड गोल्फ के लिए उपयोगी: प्रिंट (('ko', 'ठीक है') [एक polku
यह वैध अजगर कोड, यह है कि क्या "कानूनी" उपयोग तो राय के ज्यादातर एक मामला है। – skyking