2014-10-16 13 views
5

के लिए पायथन उन्नत असाइनमेंट क्या पाइथन ने अपने बुलियन ऑपरेटर से संबंधित असाइनमेंट स्टेटमेंट बढ़ाए हैं?बूलियन ऑपरेटर

उदाहरण के लिए मैं यह लिख सकते हैं:

x = x + 1 

या इस:

x = x and y 

लेखन से बचने के लिए ":

x += 1 

वहाँ कुछ मैं इस के स्थान पर लिख सकते हैं एक्स "दो बार?

ध्यान दें कि मुझे & = का उपयोग करके बयान के बारे में पता है, लेकिन मैं एक बयान की तलाश कर रहा था जो वाई के किसी भी प्रकार का काम करेगा, न कि जब कोई बूलियन होता है।

+3

संक्षिप्त उत्तर: नहीं। लंबा जवाब: बुलियन ऑपरेटर कभी भी ऑपरेटरों को प्रभावित नहीं करेंगे, इसलिए एक इन-प्लेस संस्करण आपको कुछ भी नहीं प्राप्त करेगा। आप या तो 'x' या' y' से बांधते हैं, 'x' द्वारा संदर्भित ऑब्जेक्ट को नहीं बदलते हैं। –

+0

@MartijnPieters जो समझ में आता है, धन्यवाद! – nonagon

उत्तर

2

नहीं, boolean operators के लिए augmented assignment operator नहीं है।

उत्परिवर्तित बाएं हाथ को एक नई वस्तु बनाने के बजाए ऑब्जेक्ट को स्थानांतरित करने का मौका देने के लिए बढ़ी असाइनमेंट मौजूद है। दूसरी तरफ बुलियन ऑपरेटर का इन-प्लेस ऑपरेशन में अनुवाद नहीं किया जा सकता है; x = x and y के लिए आप या तो x से x पर रीबंड करें, या आप इसे y पर पुन: स्थापित करें, लेकिन xस्वयं नहीं बदलेगा।

इस प्रकार, x and= y वास्तव में काफी उलझन में होगा; या तो x अपरिवर्तित होगा, या y द्वारा प्रतिस्थापित किया जाएगा।

जब तक आप वास्तविक बूलियन वस्तुओं है, नहींbitwise operators के लिए &= और |= संवर्धित कार्य का उपयोग करते हैं। केवल बूलियन ऑब्जेक्ट्स के लिए (इसलिए True और False) वे ऑपरेटरों को and और or ऑपरेटरों के समान उत्पादन के उत्पादन के लिए ओवरलोड किया गया है। अन्य प्रकार के लिए वे या तो TypeError, या पूरी तरह से अलग-अलग ऑपरेशन लागू होंगे। पूर्णांक के लिए, यह थोड़ा सा ऑपरेशन है, इसे चौराहे करने के लिए इसे अधिभारित करता है।

+0

एक पुराना विषय खोलने के लिए खेद है, फिर भी मार्टजिन की व्याख्या क्यों बुलियन ऑपरेटर के कोई उन्नत संस्करण मौजूद नहीं है। वास्तव में पाइथन संदर्भ पुस्तिका बताती है कि इन-प्लेस व्यवहार वैकल्पिक है और केवल तभी किया जाता है जब यह संभव हो (देखें [Augmented असाइनमेंट स्टेटमेंट] (https://docs.python.org/2.7/reference/simple_stmts.html#augmented-assignment -statements))। – davidedb

+0

उदाहरण के तौर पर, यदि 'x = 1', असाइनमेंट' x + = 3' कार्य करता है और 'x' से' 4' को पुनर्निर्मित करता है, तो नंबर '1' _in-place_ को संशोधित किए बिना। – davidedb

+0

@ डेविडडेब: हालांकि ** ** बुलियन ** उन्नत ऑपरेशन नहीं है। कोई 'और =' या 'या =' नहीं है, क्योंकि रिबाइंडिंग ऑपरेटर के परिणाम * प्रकार * से स्वतंत्र पर निर्भर होगी। –

3

बराबर अभिव्यक्ति and के लिए &= और or के लिए |= है।

>>> b = True 
>>> b &= False 
>>> b 
False 

नोट bitwise AND और bitwise OR और केवल bool प्रकार के लिए काम करेंगे (जैसा कि आप उम्मीद करते हैं)। bitwise AND ऐसे संख्यात्मक

>>> bool(12) and bool(5) # logical AND 
True 

>>> 12 & 5 # bitwise AND 
4 

के रूप में अन्य प्रकार के लिए logical AND तुलना में अलग है कृपया इस संदर्भ में तार्किक संचालन बनाम बिटवाइज़ का एक और अधिक गहन विचार विमर्श के लिए this post देखते हैं।

+4

नहीं, वास्तव में नहीं। यह केवल बुलियन मूल्यों पर काम करता है। बाकी सब कुछ पर यह एक त्रुटि या * bitwise और * होगा। –

+0

+1 हालांकि यह बिल्कुल वही 'और' नहीं है ... यह निश्चित रूप से सरल बूलियन प्रकारों के लिए काम करता है –

+0

@ जोरनबेस्ले: जवाब को स्पष्ट करना चाहिए, हालांकि। अभी यह ऐसा लगता है कि किसी को बिटवाई और बूलियन ऑपरेटर के बीच भ्रमित हो गया है, सिर्फ इसलिए कि बुलियन प्रकार दोनों को समान व्यवहार करता है। –

संबंधित मुद्दे