2013-03-17 5 views
17

हर सेमेस्टर जोड़ने के लिए मैं कम से कम एक अजगर छात्र जो dict.update का उपयोग करता है() एक एकल मुख्य/मान जोड़े, अर्थात् .:अजगर dict.update बनाम सबस्क्रिप्ट एक भी मुख्य/मान जोड़े

mydict.update({'newkey':'newvalue'}) 
जोड़ने के लिए

mydict['newkey'] = 'newvalue' 

के बजाय मैं इस विधि ही नहीं सिखाते और मैं जहां वे इसके उदाहरण पता लगा रहे हैं पता नहीं है, लेकिन मैं उनसे कहता हूं यह करने के लिए नहीं है क्योंकि यह कम कुशल है (शायद बनाता है एक नया 2-तत्व dict) और क्योंकि यह गैर मानक है।

ईमानदारी से, मैं इस वाक्यविन्यास के बजाय एक दृश्य विधि का उपयोग करने की इच्छा को समझ सकता हूं - यह शायद अन्य विधि कॉल के साथ अधिक संगत लगता है। लेकिन मुझे लगता है कि यह एक नौसिखिया दृष्टिकोण की तरह दिखता है।

क्या इस बिंदु पर किसी को भी कोई ज्ञान देना है?

+3

आपका प्रश्न क्या है? क्या आप सिर्फ यह पूछ रहे हैं कि इस तरह से 'अपडेट' का उपयोग करना एक अच्छा/बुरा विचार है? – BrenBarn

+0

मुझे लगता है कि एसओ * प्रोग्रामिंग * प्रश्न पूछने का एक स्थान है - वास्तव में * शिक्षण प्रोग्रामिंग * के बारे में प्रश्न पूछने के लिए एक जगह नहीं है। इस तरह, यह संभवतः बहुत जल्दी बंद हो जाएगा। यद्यपि आपकी खोज में शुभकामनाएँ। – mgilson

+1

हाँ - और कारण क्यों। यह इतना शिक्षण प्रश्न नहीं है। यह एक सवाल है कि यह विधि अक्षम, अव्यवस्थित, आदि है या नहीं, शिक्षण हिस्सा केवल कुछ पृष्ठभूमि है। टिप्पणियों के लिए धन्यवाद –

उत्तर

19

एक बेंचमार्क से पता चलता है अपने प्रदर्शन प्रभाव के अपने संदेह सही प्रतीत:

$ python -m timeit -s 'd = {"key": "value"}' 'd["key"] = "value"' 
10000000 loops, best of 3: 0.0741 usec per loop 
$ python -m timeit -s 'd = {"key": "value"}' 'd.update(key="value")' 
1000000 loops, best of 3: 0.294 usec per loop 
$ python -m timeit -s 'd = {"key": "value"}' 'd.update({"key": "value"})' 
1000000 loops, best of 3: 0.461 usec per loop 

है, इसके बारे में छह बार मेरी मशीन पर धीमी है। हालांकि, पाइथन पहले से ही ऐसी भाषा नहीं है जिसका उपयोग आप शीर्ष प्रदर्शन की ज़रूरत है, इसलिए मैं स्थिति में सबसे ज्यादा पढ़ने योग्य चीज़ों का उपयोग करने की सलाह दूंगा। बहुत सी बातें के लिए, कि [] तरीका होगा, हालांकि update इस तरह की एक स्थिति में अधिक पठनीय हो सकता है:

configuration.update(
    timeout=60, 
    host='example.com', 
) 

है & hellip; या कुछ इस तरह।

+0

का उपयोग शुरू करने की आवश्यकता है अनुक्रमित अद्यतन करने के लिए लिया गया समय किसी भी सार्थक एप्लिकेशन में अप्रासंगिक है। [] = एस की और अधिक महत्वपूर्ण पठनीयता। मुझे अद्यतन संस्करण बहुत कम स्पष्ट लगता है। –

+0

@ पीटरवॉस्टर: मैं मानता हूं कि पठनीयता अधिक महत्वपूर्ण है, लेकिन मुझे व्यक्तिगत रूप से 'अद्यतन' अधिक पठनीय लगता है। – icktoofay

+0

लेकिन आपने शायद फोरट्रान कभी नहीं लिखा :) –

2

अपडेट कर रहा है कुंजी सीधे रूप में तेजी से तीन बार है, लेकिन YMMV:

$ python -m timeit 'd={"k":1}; d.update({"k":2})' 
1000000 loops, best of 3: 0.669 usec per loop 

$ python -m timeit 'd={"k":1}; d["k"] = 2' 
1000000 loops, best of 3: 0.212 usec per loop 
+0

अच्छी तरह से इसे sews, धन्यवाद! मुझे टाइमिट –

0

वहाँ लोग हैं, जो लगता है कि [] = एक वस्तु उन्मुख भाषा में एक वैध वाक्यात्मक तत्व, या उस बात के लिए किसी भी अन्य नहीं है । मुझे एपीएल भाषा के विकास में काम करते समय दशकों पहले इस तर्क को सुनना याद है। यह वाक्यविन्यास फोरट्रान से एक होल्डओवर है ...

मैं व्यक्तिगत रूप से उस दृश्य की सदस्यता नहीं लेता हूं और अनुक्रमित असाइनमेंट से काफी खुश हूं। लेकिन ऐसे लोग हैं जो दावा करेंगे कि असली विधि कॉल बेहतर है। और निश्चित रूप से एक से अधिक समाधान होने के लिए हमेशा अच्छा होता है।

संपादित करें: असली मुद्दा यहां पठनीयता है, प्रदर्शन नहीं, अनुक्रमित असाइनमेंट सहन हो गया है क्योंकि बहुत से लोग कम सैद्धांतिक रूप से सही होने पर भी असाइनमेंट को पढ़ने में आसान पाते हैं।

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