2012-08-04 8 views
9

में ऑपरेटर प्राथमिकता बदलें मैंने कुछ पायथन ऑपरेटरों, अंकगणित और बूलियन को अधिभारित किया है। पाइथन प्राथमिकता नियम प्रभाव में रहते हैं, जो अधिभारित ऑपरेटरों के लिए अप्राकृतिक है, जिससे अभिव्यक्तियों में बहुत सारे कोष्ठक होते हैं। क्या पाइथन की प्राथमिकताओं को "ओवरलोड" करने का कोई तरीका है?पायथन

+5

नहीं। यह पाइथन भाषा का हिस्सा है। यह बताता है कि भाषा कैसे पार्स करती है। – jdi

+1

@jdi यह एक जवाब है, इसे क्यों नहीं बनाते? – kojiro

+0

@kojiro: ठीक है क्योंकि मुझे आधिकारिक पायथन दस्तावेज़ों का एक लिंक नहीं मिला था जिसमें यह कहा जा सकता है कि इसे बदला नहीं जा सकता है। हालांकि मुझे तीसरे पक्ष के लिंक मिलते हैं जो इसे बताते हैं। – jdi

उत्तर

8

नहीं। यह पाइथन भाषा का हिस्सा है। यह बताता है कि भाषा कैसे पार्स करती है।

सरकारी बोली: Evaluation order

अजगर बाएं से दाएं भाव मूल्यांकन करता है। ध्यान दें कि असाइनमेंट का मूल्यांकन करते समय दाएं हाथ की तरफ बाएं हाथ से पहले मूल्यांकन किया जाता है।

अन्य उद्धरण:

Python:Basics:Numbers and operators

जब मिश्रित ऑपरेटरों के साथ गणितीय क्रियाओं प्रदर्शन, यह नोट करने के लिए अजगर निर्धारित करता है कि जो संचालन पहले प्रदर्शन करने के लिए, एक पूर्व निर्धारित के आधार पर महत्वपूर्ण है पूर्वता। यह प्राथमिकता अधिकांश प्रोग्रामिंग भाषाओं के लिए समान प्राथमिकता का पालन करती है।

Python Programming/Operators

ध्यान दें कि अजगर PEMDAS order of operations का पालन करता है।

+6

मुख्य समस्या यह है कि पार्सन कोड को पार्स करते समय ऑपरेटर प्राथमिकता लागू करता है।उस शुरुआती बिंदु पर पाइथन के लिए यह जानना संभव नहीं है कि अभिव्यक्ति में वास्तव में कौन से प्रकार शामिल हैं (जैसा कि कोड अभी तक निष्पादित नहीं किया गया है)। इसलिए यदि ऑपरेटर प्राथमिकता को बदलना संभव था, तो आप सामान्य गणित अभिव्यक्तियों सहित सभी अभिव्यक्तियों के लिए ऐसा करेंगे। अब कल्पना करें कि मानक लाइब्रेरी में और किसी भी थर्ड-पार्टी लाइब्रेरी में यह किस प्रकार की अराजकता होगी यदि यह संभव था। – liori

+0

@ लिओरी: अच्छा जोड़ा! आप एक ही परिवर्तित किए गए दुभाषिया – jdi

+0

के तहत आपके साथ मिश्रित किसी भी तृतीय पक्ष कोड का उपयोग नहीं कर सके, जो कि पाइथन क्या करता है, न केवल यह बताता है कि मैं ऐसा करना संभव नहीं कर सकता हूं। –

6

आप इस तरह से है कि तंत्र धोखा कर सकते हैं:

  1. अवहेलना गणना नहीं करने के लिए सभी ऑपरेटरों लेकिन कुछ वस्तु में लिपटे निर्देश की सूची बनाते हैं।
  2. अपना खुद का ब्रैकेट ऑपरेटर जोड़ें (यानी _ फ़ंक्शन के रूप में)।

उदाहरण:

>>> a = MyNumber(5); b = MyNumber(2); c = MyNumber(3) 
>>> a + b * c 
MyExpression([MyNumber(5), '+', MyNumber(2), '*', MyNumber(3)]) 

कोष्ठक:

>>> a + _(b * c) 

ध्यान दें कि _ एक समारोह है कि अभिव्यक्ति का मूल्यांकन करता है

तो अगर आप priorites रिवर्स (आदेश आप इसे में लागू में) है आप पाएंगे:

>>> _(a + b * c) 
MyNumber(21) 

पीएस। Django Q और F ऑपरेटरों के साथ समान चाल करता है।