2012-05-25 15 views
16

एक परियोजना में अजगर कोड की निम्न बिट मैं बनाए रखने के लिए है नहीं है:पाइथन में एक चर के सामने प्लस साइन क्या करता है?

# If the `factor` decimal is given, compute new price and a delta 
factor = +factor.quantize(TWOPLACES) 
new_price = +Decimal(old_price * factor).quantize(TWOPLACES) 
delta = new_price - old_price 

यहां सवाल एक चर के सामने + का उद्देश्य है।

पायथन डॉक्स call यह यूनरी प्लस ऑपरेटर, जो "इसके अंकीय तर्क को अपरिवर्तित करता है"। क्या इसे सुरक्षित रूप से हटाया जा सकता है?

(संयोग से, कोड कुछ समय पहले मेरे द्वारा लिखा गया था, उम्मीद है कि मैंने सबक सीखा है- यदि परीक्षण मौजूद थे तो यह कोई प्रश्न नहीं होगा, या यदि दशमलव पर यूनरी प्लस का उपयोग टिप्पणियों में स्पष्ट किया गया था ।)

+2

जब आप इसे हटाते हैं तो क्या होता है? –

+1

कुछ भी स्पष्ट नहीं है, लेकिन चूंकि यह संवेदनशील संख्यात्मक जानकारी (उत्पाद मूल्य निर्धारण) से संबंधित है, इसलिए यह निश्चित रूप से जानना बेहतर है। हां, प्रासंगिक परीक्षण गुम हैं। – Tony

+0

मुझे यकीन है कि इसके लिए कुछ उद्देश्य है। मुझे जवाब नहीं पता, लेकिन अगर मैं तत्काल, ध्यान देने योग्य अंतर था तो मैं उत्सुक था। –

उत्तर

18

वह प्लस साइन क्या करता है उस पर निर्भर करता है कि उस अभिव्यक्ति के परिणामस्वरूप क्या करना है (उस ऑब्जेक्ट की __pos__() विधि कहा जाता है)। इस मामले में, यह Decimal ऑब्जेक्ट है, और यूनरी प्लस plus() विधि को कॉल करने के बराबर है। असल में, यह संख्या के संकेत को बदलने के बिना वर्तमान संदर्भ (परिशुद्धता, गोल, आदि) लागू करने के लिए प्रयोग किया जाता है। संदर्भ देखने के लिए setcontext() या localcontext() कहीं और कॉल करें। अधिक जानकारी के लिए, see here

यूनरी प्लस का अक्सर उपयोग नहीं किया जाता है, इसलिए यह आश्चर्य की बात नहीं है कि यह उपयोग अपरिचित है। मुझे लगता है कि decimal मॉड्यूल एकमात्र मानक मॉड्यूल है जो इसका उपयोग करता है।

+0

धन्यवाद! वास्तव में मॉड्यूल की शुरुआत में 'setcontext (संदर्भ (rounding = ROUND_UP)) कॉल मौजूद है। – Tony

2

मैं इस समस्या में भाग गया जब मैंने गलत तरीके से माना कि पायथन को सी वृद्धि (++) ऑपरेटर का समर्थन करना चाहिए; यह नहीं करता! इसके बजाए, यह प्लस-साइन ऑपरेटर (+) दो बार लागू होता है! जो दो बार कुछ नहीं करता, मैंने जल्द ही सीखा। हालांकि, क्योंकि "++ n" वैध दिखता है ... सिंटैक्स त्रुटि के रूप में फ़्लैग नहीं किया गया ... मैंने अपने लिए एक भयानक बग बनाया।

तो जब तक आप इसे फिर से परिभाषित नहीं करते हैं, तो यूनरी + वास्तव में कुछ भी नहीं करता है। यूनरी - सकारात्मक से नकारात्मक और इसके विपरीत में परिवर्तन, यही कारण है कि "--n" को वाक्यविन्यास त्रुटि के रूप में भी चिह्नित नहीं किया जाता है लेकिन यह कुछ भी नहीं करता है।

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