2011-07-11 22 views
5

मैं कुछ अजगर numpy कोड है, जो की तरह"x * = -1" का उपयोग करने का लाभ। "x * = -1" से अधिक?

a = 1. # later on, `a` is multiplied by other floats 
x *= -1. 

रेखाएं हों, पर देख रहा हूँ (मैं क्या उम्मीद है कि सही ढंग से समझ से, 1.1.0 के बराबर है)।

क्या a = 1 और x *= -1 पर ऐसा करने का कोई कारण है? अगर मैं a और x को बाद में एक पूर्णांक से विभाजित करने जा रहा हूं, तो मैं इसे समझ सकता हूं, ताकि मुझे उन्हें एक फ्लोट पर डालने के बारे में चिंता करने की आवश्यकता न हो (मान लीजिए कि मैं एक फ्लोट वापस लौटाना चाहता हूं विभाजन), लेकिन क्या अन्य कारण हैं?

उदाहरण के लिए, यदि मुझे पता है कि a एक फ्लोट के रूप में समाप्त होने जा रहा है, तो क्या यह प्रदर्शन के कारणों से बेहतर है कि इसे शुरुआत से ही फ्लोट के रूप में शुरू किया जाए? या यह सिर्फ स्पष्टता के लिए है (यह स्पष्ट करने के लिए कि a और x दोनों फ़्लोट होने के लिए हैं)?

+1

शायद स्पष्टता और बग टालने दोनों के लिए। –

उत्तर

6

यह स्पष्टता के लिए बहुत अधिक है।

एक पूर्णांक द्वारा एक फ्लोट को गुणा करने के दौरान एक छोटे से प्रदर्शन हिट (पूर्णांक को एक फ्लोट में परिवर्तित करने के लिए) हो सकता है, यह संकलक पर निर्भर करता है और इसके बारे में चिंता करने के लिए पर्याप्त पर्याप्त दंड भी नहीं होना चाहिए (जब तक कि आप ऐसा नहीं कर रहे हैं कई ऐसे परिचालन)।

हालांकि, यह निश्चित रूप से स्पष्टता के लिए अंक स्कोर करता है। अंत में, आप वास्तव में एक फ़्लोटिंग-पॉइंट नंबर को फ़्लोटिंग-पॉइंट नंबर से गुणा कर रहे हैं, और इस तथ्य को छिपाने का कोई कारण नहीं है। यदि a और x फ़्लोट मान होने के लिए हैं, तो उन्हें फ़्लोट मान दें।

1

कोई भी आत्म सम्मानित संकलक उचित प्रकार के स्थिरांक को बढ़ावा देगा। अंतर केवल कॉस्मेटिक है।

+2

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

+0

इंफैक्ट ब्लिंडी यह नहीं कहता कि संकलक एक अभिव्यक्ति के प्रकार को बदलता है लेकिन बस यह स्थिरांक को बढ़ावा देता है। मुझे आश्चर्य होगा कि, पाइथन में किसी अन्य भाषा के रूप में, इस तरह के रूपांतरण रनटाइम से संबंधित है! – Mapio

+0

@eryksyn: आप सही हैं! सी प्रोग्रामिंग (और शिक्षण) के बहुत से वर्षों ने मुझे इस तथ्य को भूल लिया कि यह पायथन में (स्थिर/संकलन-समय) प्रकार के युद्धों के बारे में बात करने के लिए गैर सेसो बना देता है ... – Mapio

0

आउटपुट में कोई अंतर नहीं है जिसे मैं पहचान सकता हूं।

>>> float(1.*-5.*0.*-1.).hex() 
'0x0.0p+0' 
>>> float(1.*-5.*0.*-1).hex() 
'0x0.0p+0' 
>>> float(1.*5.*0.*-1.).hex() 
'-0x0.0p+0' 
>>> float(1.*5.*0.*-1).hex() 
'-0x0.0p+0' 
>>> 
संबंधित मुद्दे