आईएमएचओ एक स्टाइल गाइड का बिंदु कुछ सामान्य संरचनाओं को मानकीकृत करना है, इस तरह से समझ में आता है, इसलिए आप अंततः एक ही काम करने वाले जंगली असंतोषजनक बयान के साथ खत्म नहीं होंगे। अधिक, असामान्य रूप सुझाव दे सकते हैं कि प्रोग्रामर के पास कुछ अलग तरीके से काम करने का कोई कारण था, शायद वह कथन की तरह दिखने से कुछ अलग करने की कोशिश कर रहा था।
यदि आप किसी कथन की सत्यता/झूठ का परीक्षण करना चाहते हैं, तो बस कथन का उपयोग करें या इसे not
से पहले करें। यदि आपको यह सुनिश्चित करना होगा कि कथन True
या False
(केवल एक सच्चाई/झूठा मूल्य नहीं) का मूल्यांकन करता है, तो आप statement is True
का उपयोग कर सकते हैं - हालांकि शैली मार्गदर्शिका इसे हतोत्साहित करती है - या शायद इसके प्रकार की जांच करें (isinstance
का उपयोग करके)। लेकिन यह आमतौर पर खराब डिज़ाइन होता है, आपको तब तक बचना चाहिए जब तक कि आपके पास ऐसा करने का कोई अच्छा कारण न हो।
statement == True
का उपयोग कई कारणों से खतरनाक है: 1) केवल True
के साथ काम करें, अन्य "सच्चाई" मानों (जैसे [1]
) के साथ असफल रहा; 2) अप्रत्याशित परिणाम उत्पन्न कर सकता है यदि कथन द्वारा लौटाया गया मान __eq__
को फिर से परिभाषित करता है; 3) तर्कों का क्रम बदल दिया गया है, तो विभिन्न परिणाम पैदा कर सकते हैं।ध्यान दें कि अगर कथन का उपयोग केवल __nonzero__
या __len__
लागू करता है, लेकिन नियमित उपयोग के लिए आमतौर पर कोई समस्या नहीं है, तो कथन का उपयोग करके सत्य/झूठ के लिए एक अलग मूल्य भी लौटा सकता है।
कुछ दिखा कैसे चीजें में गड़बड़ अगर आप शैली से विचलित हो सकता है उदाहरण:
if True: print True # True
if 1: print True # True
if [1]: print True # True
True is True # True
1 is True # False
[1] is True # False
True == True # True
1 == True # True
[1] == True # False
संपादित करें: कुछ और:
if 1: print True # True
if 2: print True # True
1 == True # True
2 == True # False
1 is True # False
2 is True # False
अद्यतन: @Marcin ने बताया के रूप में , True
/False
पर मूल्य को कॉरर्स करने के लिए आप bool
का उपयोग कर सकते हैं, यह गारंटी देते हुए कि केवल वे मान मौजूद होंगे। उस फ़ंक्शन का परिणाम मान के डिफ़ॉल्ट सत्य/झूठ के अनुरूप है (इसलिए __nonzero__
और __len__
को ध्यान में रखा जाता है)। कुछ उदाहरण:
if bool(1): print True # True
bool(1) == True # True
bool(1) is True # True
if bool(2): print True # True
bool(2) == True # True
bool(2) is True # True
1 or 2 # 1
1 and 2 # 2
bool(1) or bool(2) # True
bool(1) and bool(2) # True
bool(1) == bool(2) # True
bool(1) is bool(2) # True
मुझे लगता है कि बूलियन परीक्षण के लिए सबसे अच्छी शैली स्टाइल गाइड में सबसे खराब लेबल है। यदि नंबरऑफ एप्पल सही है: यह स्पष्ट होगा कि संख्याऑफ एप्पल एक बूल नहीं है। –
फिर यदि आप वास्तव में चाहते हैं तो तुलना करें x की प्रकार bool() है और यदि यह है, तो यह सही है या गलत –
@PedroWerneck बिल्कुल सही है। तो स्टाइल गाइड यह कहने में गलत है कि बूल का परीक्षण करने का सबसे बुरा तरीका यह है कि अगर bool_type है [True | False]: क्योंकि यह वास्तव में सबसे अच्छा तरीका –