2009-09-13 14 views
26

के लिए समकक्ष "पास" समतुल्य है, मैं get_count_and_price नामक लाइब्रेरी फ़ंक्शन का उपयोग कर रहा हूं जो 2-टुपल (गिनती, मूल्य) देता है। कई जगहों पर मैं समय और मूल्य दोनों का उपयोग करता हूं। हालांकि, कुछ में मुझे केवल समय या कीमत की आवश्यकता होती है। तो अभी, अगर मुझे केवल गिनती की ज़रूरत है, तो मैं (गिनती, कीमत) असाइन करता हूं और कीमत को अप्रयुक्त छोड़ देता हूं।पायथन में, एक वैरिएबल असाइनमेंट

यह बहुत अच्छा काम करता है और स्वयं में कोई परेशानी नहीं होती है।

हालांकि ...

मैं PyDev साथ ग्रहण का उपयोग, और नए संस्करण 1.5 स्वचालित रूप से त्रुटियों और चेतावनियों को दर्शाता है। चेतावनियों में से एक यह दिखाता है कि अप्रयुक्त चर है। उपर्युक्त उदाहरण में, यह कीमत को अप्रयुक्त के रूप में ध्वजांकित करता है। यह व्यवहार का एक प्रकार है जो महान है और मैं वास्तव में मेरे लिए यह करने के लिए PyDev की सराहना करता हूं। हालांकि, मैं असाइनमेंट को पूरी तरह से कीमत पर छोड़ना चाहता हूं। आदर्श रूप में, मुझे कुछ पसंद आएगा:

(count,None) = get_count_and_price() 

अब जैसा कि हम सभी जानते हैं, कोई भी असाइन नहीं किया जा सकता है। क्या इस मामले में मैं कुछ और कर सकता हूं?

मैं जानता हूँ कि मैं की तरह

count = get_count_and_price()[0] 

कुछ कर सकते हैं लेकिन मैं सिर्फ अगर कोई किसी भी बेहतर सुझाव है देखने के लिए पूछ रहा हूँ।

उत्तर

29

मुझे लगता है कि [0] सबस्क्रिप्ट का उपयोग करने में कुछ भी गलत नहीं है, लेकिन कभी-कभी लोग "फेंकने" चर _ का उपयोग करते हैं। यह वास्तव में किसी भी अन्य चर (कंसोल में विशेष उपयोग के साथ) की तरह है, सिवाय इसके कि कुछ पायथन उपयोगकर्ताओं ने इसे एक सम्मेलन के रूप में "फेंकने" का फैसला किया है।

count, _ = get_count_and_price() 

PyDev समस्या के बारे में, आपको केवल [0] सबस्क्रिप्ट का उपयोग करना चाहिए। लेकिन यदि आप वास्तव में _ का उपयोग करना चाहते हैं तो एकमात्र समाधान अप्रयुक्त चर चेतावनियों को अक्षम करना है यदि यह आपको परेशान करता है।

+7

इस बारे में सावधान रहें। याद रखें कि एक इंटरेक्टिव पायथन दुभाषिया में, '_' का एक विशेष अर्थ है, और इसे असाइन करने से वह जादू दूर हो जाता है। – SingleNegationElimination

+0

@TokenMacGuy: हाँ मुझे पता है, मैंने इसके बारे में एक ही प्रश्न में लिखा है http://stackoverflow.com/questions/818828/is-it-possible-to-implement-a-python-for-range-loop-without -an-iterator-variable/818836 # 818836 – Unknown

+6

हास्केल और एरलांग _ को "फेंकने" चर के रूप में भी उपयोग करते हैं। –

3

हम अक्सर ऐसा करते हैं।

count, _ = get_count_and_price() 

या इस

count, junk = get_count_and_price() 
7

आप के लिए ग्रहण जाना है -> प्राथमिकताएं ... खिड़की, आप वास्तव में निर्दिष्ट कर सकते हैं अगर वे अप्रयुक्त हैं कि कौन-चर नाम PyDev अनदेखा कर देना चाहिए (मैं पर देख रहा हूँ नवीनतम पायडेव 1.5.एक्स)।

आप PyDev पर जाएँ -> संपादक -> कोड विश्लेषण और पिछले क्षेत्र है कि कहते हैं, "अप्रयुक्त चर रिपोर्ट न करें अगर नाम के साथ शुरू होता है"

जो कुछ भी नाम आप वहाँ में चाहते हैं और फिर दर्ज करें जिसका उपयोग को देखो उस नाम को प्रतिबंधित करने के लिए जो नाम PyDev अप्रयुक्त चेतावनियों को अनदेखा कर देगा।

डिफ़ॉल्ट रूप से, ऐसा लगता है कि PyDev किसी भी चर के लिए अप्रयुक्त चर चेतावनी छिपाएगा जिनके नाम "डमी", "_", या "अप्रयुक्त" से शुरू होते हैं।

@TokenMacGuy के रूप में नीचे कहा, मैं क्योंकि यह अजगर में कुछ निश्चित परिस्थितियों में विशेष अर्थ (विशेष रूप से यह इंटरैक्टिव दुभाषिया में प्रयोग किया जाता है) है बस का उपयोग कर के खिलाफ सलाह देते हैं "_"।

+0

की तरह, जबकि आप '_' के विशेष अर्थ के बारे में एक अच्छा बिंदु बनाते हैं दुभाषिया, मेरी धारणा यह है कि लिखित कोड में यह एक अलग विशेष अर्थ (यदि केवल सम्मेलन द्वारा) के लिए काफी व्यापक रूप से समझा जाता है। –

20

_ का उपयोग अलग-अलग प्रस्तावित के रूप में कुछ मुद्दों में हो सकता है (हालांकि यह अधिकतर ठीक है)।पायथन शैली दिशानिर्देशों द्वारा हम काम पर उपयोग करते हैं, आमतौर पर count, unused_price = ... का उपयोग करते हैं क्योंकि पिलिंट unused_ से शुरू होने वाले बैरनेम्स को असाइनमेंट को अनदेखा करने के लिए कॉन्फ़िगर किया गया है (और इसके बजाय ऐसे किसी भी बैरेनम के उपयोग पर चेतावनी दें!)। लेकिन मुझे नहीं पता कि PyDev को इस तरह से व्यवहार करने के लिए कैसे निर्देश देना है!

+3

मैंने अभी Pydev 2.2.2 में अपग्रेड किया है और ऐसा लगता है कि अब यह डिफ़ॉल्ट रूप से 'unused_' सम्मेलन को पहचानता है और कोई चेतावनी नहीं देता है – Jonathan

2

मैं नहीं बल्कि यह _price नाम था बजाय, इन कारणों से:

  • यह gettext और इंटरैक्टिव शीघ्र के साथ संघर्ष, जो दोनों _

  • का उपयोग यह में वापस बदलना आसान है हल करती है price यदि आप इसे बाद में आवश्यकता है।

  • जैसा कि अन्य ने बताया है, अग्रणी अंडरस्कोर में पहले से ही कई भाषाओं में "आंतरिक" या "अप्रयुक्त" का अर्थ है।

तो अपने कोड इस तरह लग रही अंत होगा:

(count, _price) = get_count_and_price() 
1

मैं एक Necromancer बिल्ला के बाद जायेंगे। :)

आपने कहा कि आप PyDev का उपयोग कर रहे हैं। PyDev में (कम से कम हाल के संस्करण - मैंने कितनी दूर तक जांच नहीं की थी), "अप्रयुक्त" से शुरू होने वाले किसी भी परिवर्तनीय नाम को अप्रयुक्त परिवर्तनीय चेतावनी से छूट दी जाएगी। अन्य स्थैतिक विश्लेषण उपकरण अभी भी शिकायत कर सकते हैं, हालांकि (pyflakes करता है - लेकिन ऐसा लगता है कि यह चेतावनी किसी भी तरह से एक tuple-unpacking संदर्भ में अनदेखा)।

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