प्रोग्रामिंग के लिए नए लोगों के लिए एक आम गलती बूलियन ऑपरेटरों के काम करने के तरीके की गलतफहमी है, जो कि पाइथन दुभाषिया इन अभिव्यक्तियों को पढ़ने के तरीके से उत्पन्न होता है। उदाहरण के लिए, शुरू में "और" और "या" कथनों के बारे में जानने के बाद, कोई यह मान सकता है कि व्यंजक X =('x' या 'y') यह देखने के लिए जाँच करेगा कि क्या चर X किसी एक स्ट्रिंग 'a' के बराबर है। ' या 'बी'। ऐसा नहीं है। यह समझने के लिए कि मैं क्या कहना चाह रहा हूँ, दुभाषिया के साथ एक इंटरैक्टिव सत्र शुरू करें और निम्नलिखित भाव दर्ज करें:
>>> 'x' == ('x' or 'y') True >>> 'y' == ('x' or 'y') False >>> 'x' == ('x' and 'y') False >>> 'y' == ('x' and 'y') True
इस बिंदु पर, और और या ऑपरेटर टूटा हुआ प्रतीत होता है। इसका कोई मतलब नहीं है कि, पहले दो व्यंजकों के लिए, 'x', 'x' के बराबर है या 'y' नहीं है। इसके अलावा, इसका कोई मतलब नहीं है कि 'y' 'x' और 'y' के बराबर है। यह जांचने के बाद कि दुभाषिया बूलियन ऑपरेटरों के साथ क्या करता है, ये परिणाम वास्तव में वही करते हैं जो आप उनसे पूछ रहे हैं, यह वैसा नहीं है जैसा आप सोचते हैं कि आप पूछ रहे हैं।
एक या अभिव्यक्ति के मामले में, पायथन दुभाषिया पहले पहला बयान लेता है और यह देखने के लिए जांच करता है कि क्या सच है। जब पहला कथन सत्य होता है, तो अजगर दूसरे तर्क को देखे बिना उस वस्तु का मान लौटा देता है। ऐसा इसलिए है क्योंकि किसी या व्यंजक के लिए, यदि कोई एक मान सत्य है, तो पूरी बात सत्य है; और कार्यक्रम दूसरे कथन को नहीं देखता है। हालाँकि, यदि पहला ऑब्जेक्ट मान असत्य का मूल्यांकन करता है, तो अजगर दूसरे कथन की जाँच करता है और वह मान लौटाता है। दूसरी छमाही अभिव्यक्ति के सत्य मूल्य को निर्धारित करती है क्योंकि पहली छमाही झूठी थी। दुभाषिया की ओर से इस "आलस्य" को "शॉर्ट-सर्किटिंग" कहा जाता है और यह कई प्रोग्रामिंग भाषाओं में बूलियन अभिव्यक्ति का मूल्यांकन करने का एक सामान्य तरीका है।
इसी तरह, एक और अभिव्यक्ति के लिए, अजगर सत्य मूल्य मूल्यांकन को गति देने के लिए शॉर्ट सर्किट तकनीक का उपयोग करता है। यदि पहला कथन गलत है तो पूरी बात झूठी होनी चाहिए और यह उस वस्तु का मान (गलत) लौटाती है, यदि पहला मान सत्य है तो यह दूसरे की जाँच करता है और उस मान को लौटाता है। आइए एक नज़र डालते हैं कि कोड के माध्यम से दुभाषिया "देखता" क्या है
पहला मामला
'x' == ('x' or 'y') # Look at parentheses first, so evaluates "('x' or 'y")" # 'x' is a nonempty string, so the first value is True >>> 'x' == 'x' # the string 'x' is equivalent to the string 'x' , so our expression is True True
दूसरा मामला
'y' == ('x' or 'y')# Look at parentheses first, so evaluates expression "('x' or 'y')" # 'x' is a nonempty string, so the first value is True #Return that first value : 'x' 'y' == 'x'# the string 'y' is not equivalent to the string 'x', so the expression is False
तीसरा मामला
>>> 'x' == ('x' and 'y')# Look at parentheses first, so evaluate expression "('x' and 'y')" #'x' is a nonempty string, so the first value is True, examine second value # 'y' is a nonempty string, so second value is True #Return that second value as result of whole expression: 'y' >>> 'x' == 'y'# the string 'x' is not equivalent to the string 'y', so expression is False False
चौथा मामला
>>> 'y' == ('x' and 'y')# Look at parenthese first, so evaluates expression "('x' and 'y')" True # 'x' is a nonempty string, so the first value is True, examine second value # 'y' is a nonempty string, so second value is True # Return that second value as result of whole expression: 'y' >>> 'y' == 'y'# the string 'y' is equivalent to the string 'y', so expression is True True
शॉर्ट-सर्किट मूल्यांकन का अर्थ है कि AND और OR जैसे बूलियन एक्सप्रेशन का मूल्यांकन करते समय, जैसे ही आपको पहली शर्त मिलती है, जो एक्सप्रेशन को संतुष्ट या अस्वीकार करती है, आप रुक सकते हैं।
आधिकारिक दस्तावेज़ीकरण द्वारा समझाया गया शॉर्ट सर्किट:
ऑपरेशन वें> <वें शैली ="पाठ-संरेखण:केंद्र;">परिणाम वें> <वें शैली ="पाठ-संरेखण:केंद्र;">विवरण वें> | ||
---|---|---|
x या y | यदि x गलत है, तो y और x | केवल दूसरे तर्क (y) का मूल्यांकन करता है यदि प्राथमिकी गलत है |
x और y | यदि x गलत है, तो x अन्य y | केवल दूसरे तर्क (y) का मूल्यांकन करता है यदि पहला तर्क (x) सत्य है |
नहीं x | यदि x असत्य है, तो सत्य है, अन्यथा असत्य है | गैर-बूलियन ऑपरेटरों की तुलना में कम प्राथमिकता नहीं है |