2009-07-13 8 views
10

उदाहरण: यह अजगर में स्ट्रिंग की एक सूची टाइप करने के लिए वास्तव में कष्टप्रद है:क्या आपके कोड में डेटा डालने पर प्रोग्रामर को सहेजने के लिए चाल का उपयोग करना स्वीकार्य है?

["January", "February", "March", "April", ...] 

मैं अक्सर मेरे टाइप करने के लिए उद्धरण हर जगह के निशान होने को बचाने के लिए कुछ इस तरह करते हैं:

"January February March April May June July August ...".split() 

उन उतना ही समय ले लिया, और मैं में टाइप महीने की # 2x मिला एक और उदाहरण:।

[('a', '9'), ('4', '3'), ('z', 'x')...] 

के बजाय:

map(tuple, "a9 43 zx".split()) 

जो बहुत कम समय लगा।

+22

बार जब आप आप इस सवाल पूछने अप का उपयोग किया था बचाया का कितना? –

+0

लगभग 400%, हां। – Claudiu

+0

मैं दूसरे उदाहरण के लिए वोट देता हूं। –

उत्तर

33

कोड आमतौर पर कई बार पढ़ा जाता है, और यह केवल एक बार लिखा जाता है।
पठनीयता की कीमत पर लेखन समय सहेजना आमतौर पर एक अच्छा विकल्प नहीं है, जब तक कि आप कुछ फेंकने वाले कोड नहीं कर रहे हों।

दूसरे संस्करण कम स्पष्ट है, और आप कुछ समय की जरूरत है समझने के लिए कोड कर रही है। और हम केवल परिवर्तनीय तात्कालिकता के बारे में बात कर रहे हैं, एल्गोरिदम के बारे में नहीं!

+0

FWIW मुझे दोनों संस्करणों को काफी पठनीय लगता है। –

+8

महीनों का उदाहरण आसानी से पठनीय है, दूसरा नहीं है। – haffax

+1

दोनों उदाहरणों के साथ समस्या यह है कि वे अन्य प्रोग्रामर के लिए अजीब लगते हैं, लंबे तारों को सरणी की तरह सामान की सूची तुरंत संवाद नहीं करता है। इसलिए वे इन छोटे उदाहरणों के लिए भी कम से कम एक डबल लेते हैं। बहुत, बहुत बुरी शैली। – NomeN

-2

मैं, इस स्वीकार्य पाते हैं, तो थोड़ा आलसी, जब तक क्या किया जा रहा है भी प्रदर्शन महत्वपूर्ण नहीं है के रूप में। यदि आप अधिक गति की आवश्यकता है तो आप हमेशा वापस जा सकते हैं और इसे अनुकूलित कर सकते हैं।

+1

मैं यह देखने में असफल रहा कि ऐसा कुछ कैसे प्रदर्शन बाधा हो सकता है। जब तक आप इसे हजारों और हजारों पाठों के लिए नहीं कर रहे हैं। –

5

सामान्यतः, मुझे लगता है कि यह एक बुरा विचार है। पहला उदाहरण इतना बुरा नहीं है (यह पाइथन की qw की कमी के लिए एक विकल्प है), लेकिन दूसरा समझना बहुत मुश्किल है। विशेष रूप से, मुझे लगता है कि इस तरह की चीज बहुत अस्पष्ट है, और निश्चित रूप से किसी भी दर पर पायथन कोड लिखते समय उचित नहीं है। संहिता पढ़ने में थोड़ा समय बचाने से कोड पठनीयता अधिक महत्वपूर्ण है। यदि आपके पास वास्तव में हार्डकोड के लिए इतना डेटा है, तो इसे आपके लिए उत्पन्न करने के लिए एक स्क्रिप्ट लिखें।

3

कितनी बार आप वास्तव में टाइप करने के लिए ["January", "February"... etc] की ज़रूरत है?

अपने दृष्टिकोण आप समय बचा सकता है, लेकिन क्यों अच्छा नहीं अन्य कारण के लिए अपने कोड की जटिलता बढ़ जाती से आप थोड़ा आलसी हैं दी?

तुम सच है कि अक्सर यह लिखने की आवश्यकता नहीं है ... कॉपी-पेस्ट!

+0

ओह, मैंने इसे कुछ बार पीटा! – Etzeitet

+2

हाँ, विज्ञापन नहीं करते "कॉपी-पेस्ट" जब तक आप एक पिटाई के लिए में हैं, यह माना जाता है बुराई (और सही कारणों के लिए) ;-) – raoulsson

+0

मैं जानता था कि मुझे मुसीबत में पड़ जाएगा: पी – Etzeitet

1

... मैं अक्सर मुझे टाइप करने के लिए उद्धरण हर जगह के निशान होने को बचाने के लिए कुछ इस तरह करते हैं ...

मैं ऐसी बात कार्यक्रम प्रति केवल एक बार किया जाना चाहिए लगता है । यदि आप "पूरे स्थान पर" वही करते हैं, तो इससे कोई फ़र्क नहीं पड़ता कि आप किस का उपयोग करते हैं, आप राक्षस बना रहे हैं।

इस तरह की घोषणा सभी कोड के लिए केवल एक बार लिखा जाना चाहिए।

+0

अच्छा pt, लेकिन द्वारा मेरा मतलब "हर जगह" "यह सब अगली पंक्ति में" – Claudiu

1

डेटा के लिए यह एक उचित बात है जिसे आप बदलने की उम्मीद नहीं करते हैं, जैसे सप्ताहों के महीनों या दिनों। फ़ाइलों या डेटाबेस के साथ बातचीत करने या छेड़छाड़ करते समय ऐसा करना भी उचित है, क्योंकि यह परीक्षण के लिए आपके कोड को अलग करता है। हालांकि, यह उत्पादन कोड के लिए एक अच्छा दीर्घकालिक समाधान नहीं है, और न ही यह आपको वास्तव में अधिक समय बचाता है। बड़ी समय-बचत की अनुमति देने के लिए पर्याप्त कुछ भी पर्याप्त है, किसी अन्य जगह डेटा को स्टोर करने की आवश्यकता के लिए पर्याप्त है, जैसे एक अलग फ़ाइल ओ डेटाबेस।

3

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

19

एक अच्छा पाठ संपादक इन बातों को एक गैर मुद्दा बना सकते हैं। कुंजी अनुक्रम V:!python<ENTER> का उपयोग कर रहा अजगर दुभाषिया के माध्यम से लाइन चला सकते हैं

print `"January February March April May June July August September October November December".split()` 

और फिर, और आउटपुट निम्नलिखित है: उदाहरण के लिए, मैं अपने कोड में निम्न पंक्ति टाइप कर सकते हैं

['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] 

मैं अपने उदाहरण के लिए विम का उपयोग कर रहा हूं, लेकिन मुझे यकीन है कि यह एमाक्स, टेक्स्टमैट इत्यादि के साथ इतना आसान है।

+7

+1, और मैं एक Emacs पुरुष हूँ =) –

+1

backquotes आवश्यक है? मुझे लगता है कि वही बैकक्वॉट के साथ और बिना उत्पादन किया जाता है। – mhawke

+0

@mhawke इसे इंगित करने के लिए धन्यवाद। मैं यह सुनिश्चित करने के लिए बैकक्वॉट का उपयोग कर रहा था कि आउटपुट एक वैध पायथन डेटा संरचना थी, लेकिन ऐसा लगता है कि सूचियों के लिए यह आवश्यक नहीं है। –

0

मुझे नहीं लगता कि इस तरह की चीज स्रोत में होनी चाहिए।

अगर मैं तुम्हें थे, मैं अजगर संबंधित दूसरे संस्करण का मूल्यांकन करें और फिर मेरे स्रोत कोड में परिणाम पेस्ट होगा।

6

एक यथोचित स्मार्ट संपादक आप कर सकते थे में:

  1. ब्याज की तर्ज का चयन करें,
  2. (1 पूर्व के लिए "<space>" द्वारा <space>।) प्रतिस्थापन डालें,
  3. जांच चयनित लाइनों चेकबॉक्स ,
  4. क्लिक सब,
  5. bam .. आपके किया बदलें।

पढ़ने योग्य और टाइप करने में आसान ... संपादक की शक्ति का सम्मान करें!

+0

क्या आप पठनीय मतलब है शिक्षण के लिए? ऐसा लगता है कि आप केवल नोटपैड के बाद से प्रत्येक संपादक में मिली खोज और प्रतिस्थापन सुविधा का जिक्र कर रहे हैं ... –

+0

पठनीय परिणामस्वरूप कोड को संदर्भित करता है, यानी एक बड़ी स्ट्रिंग "सामान की सूची" को सीधे अंतर्निहित के रूप में संवाद नहीं करती है सूची वाक्यविन्यास। – NomeN

0

मैं की तरह

"जनवरी फरवरी मार्च अप्रैल मई जून जुलाई अगस्त ..." बयान डालने लगता है। विभाजन()

मॉड्यूल में वैश्विक स्तर ठीक है। इस तरह इसे आयात के दौरान केवल एक बार निष्पादित किया जाता है। मैं कभी-कभी कम लाइन शोर की वजह से गैर-प्रदर्शन महत्वपूर्ण कार्यों में इसका उपयोग करता हूं।

एक sidenote पर मुझे लगता है कि पाइथन इंटरप्रिटर संकलन-समय पर "विभाजन()" निष्पादित करने के लिए किए जा सकते हैं जो विधि-कॉल ओवरहेड को खत्म कर देगा। कारण किया जा रहा है कि एक स्ट्रिंग अंतर्निहित शाब्दिक और अजगर बहुत आधार स्ट्रिंग प्रकार पर जोड़ने के लिए/ओवरराइड तरीकों तो संकलक पता कर सकते हैं "है कि" .split() केवल एक विशिष्ट विधि का उल्लेख कर सकते अनुमति नहीं है।

1

मैं सभी Steve McConnell's Code Complete द्वारा कसम खाता हूं: मुख्य अंतर्दृष्टि यह है कि खराब प्रोग्रामर कंप्यूटर को कुछ करने के लिए कोड लिखने के लिए कोड लिखते हैं, जबकि अच्छे प्रोग्रामर पहले कोड लिखने के लिए लिखते हैं जो लोग समझ सकते हैं और केवल दूसरा प्राप्त करने के लिए चीजें करने के लिए कंप्यूटर।

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

मुझे लगता है कि आप कोड पूरा पढ़ने से बहुत कुछ लाभ हो सकता है; मुझे पता है मैंने किया था।

1

अपने त्वरित और चालाक तरीकों जबकि अच्छा है, जो अच्छा नहीं है पढ़ने के लिए और समय लगेगा। पठनीयता हमेशा पहले आता है।

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

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