जावा डेथ लर्निंग पाइथन: मुझे किन अवधारणाओं को अपने सिर के चारों ओर लपेटने की आवश्यकता है?


38

पृष्ठभूमि: मैंने कुछ ट्यूटोरियल के माध्यम से चलाया है और कुछ छोटे प्रोजेक्ट लिखे हैं। Google और StackOverflow का उपयोग करके सभी बहुत अच्छा चल रहा है ।

पिछले कुछ दिनों में कई बार मैंने खुद को आश्चर्यचकित पाया "मैं क्या याद कर रहा हूँ?" - मुझे लगता है कि मैं जावा में अभी भी सोच रहा हूं जैसा कि मैं पायथन में लिखता हूं।

स्टैकओवरफ़्लो पर यह प्रश्न उन सुझावों से भरा है कि पायथन सीखने के लिए किन संसाधनों को पढ़ना है, लेकिन मुझे अभी भी लगता है कि मैं एक जावा डेवलपर हूं (जिसका कोई उद्देश्य नहीं है) पायथन में अनुवाद करना।

जो मैं वास्तव में करना चाहता हूं, वह यह है कि मेरे जावा कौशल को खोए बिना, मेरे सिर को पाइथन के रूप में प्रच्छन्न जावा के बजाय पाइथोनिक पायथन लिखने में सक्षम होने के लिए मेरा सिर रिफ्लेक्टर है।

तो, मेरे सवाल का सार यह है: पायथन को सोचने के लिए जावा देव को वास्तव में किन अवधारणाओं की आवश्यकता है? इसमें ऐसा कुछ भी शामिल है जिसे गैर-जरूरी होना चाहिए।

नोट: मैं भाषा अवधारणाओं के बारे में पूछ रहा हूं, भाषा वाक्य रचना के बारे में नहीं।


9
आइए विचार करें कि प्रोग्रामिंग कठिन माना जाता है।
जॉब

जवाबों:


40

पहले से ही कहा गया था के अलावा कुछ बिंदु:

  • अजगर गतिशील है। एक वर्ग का निर्माण एक निष्पादन योग्य कथन है , जैसा कि एक मॉड्यूल का आयात होता है; इसे सशर्त बनाया जा सकता है। एक वर्ग को निर्माण के बाद बदल दिया जा सकता है; यह आसान मेटाप्रोग्रामिंग और एओपी के लिए अनुमति देता है।

  • कोई इंटरफेस नहीं हैं ; बतख टाइपिंग नियम। यदि आपको उनकी सख्त जरूरत है, तो 'एब्सट्रैक्ट बेस क्लासेस (एबीसी)' हैं, लेकिन आमतौर पर आप इंटरफेस को मिस नहीं करते हैं, क्योंकि स्टैटिक टाइप चेकिंग वैसे भी नहीं होती है।

  • हालांकि सब कुछ एक वस्तु है, कार्य वस्तुओं से पहले आते हैं। एक मॉड्यूल में सिर्फ फ़ंक्शन (और कोई कक्षाएं नहीं) होना पूरी तरह से ठीक है।

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

  • बिल्ट-इन dicts, सेट्स, सूचियों और टुपल्स का उपयोग करें। सूचियाँ और dicts परस्पर हैं, tuples नहीं हैं। वे सभी बहुत कुशल और वाक्यात्मक रूप से रसीले हैं। एक ट्यूपल का उपयोग करके फ़ंक्शन से कई मान वापस करने की आदत डालें (आपको कोष्ठक की भी आवश्यकता नहीं है)। सादे सूचियों, टुपल्स और डाइचेस ('हैशटेबल्स') से बने गर्भनिरोधकों के साथ बहुत ही साधारण वस्तुओं के जटिल पदानुक्रमों को बदलने की आदत डालें, यह जीवन को सरल बनाता है।

  • पायथन में एफपी समर्थन का एक अच्छा सा हिस्सा है; सूची समझ और फिर पुनरावृत्तियों और जनरेटर सीखें। ये बहुत मदद करते हैं।

  • किसी भी ऑपरेटर को उचित तरीकों को परिभाषित करके ओवरलोड किया जा सकता है, इसलिए इसके अलावा या तुलना जो आप चाहते हैं उसे वापस कर सकते हैं। SQLAlchemy जैसी चीजों के साथ काम करना याद रखें।

  • कोई अशक्त नहीं है, केवल कोई नहीं, एक पूर्ण वस्तु है। आप किसी को भी ठीक नहीं प्रिंट कर सकते हैं, आदि पासिंग कोई भी नहीं जहां एक और उदाहरण की उम्मीद परिणाम है आमतौर पर एक एट्रीब्यूटर में, एक एनपीई नहीं, कभी-कभी निष्पादन पाइपलाइन से नीचे।

  • अजगर की पूरी तरह से गतिशील प्रकृति के कारण, आपके पास लगभग कोई स्थिर चेक नहीं है । आप एक ऐसे नाम का उल्लेख कर सकते हैं जो आपके कार्यक्रम में मौजूद नहीं है (उदाहरण के लिए एक टाइपो), या केवल एक विशेष निष्पादन पथ में परिभाषित किया गया है, और कुछ भी आपको इसकी याद नहीं दिलाएगा जब तक कि निष्पादन वास्तव में इस संदर्भ को हिट नहीं करता है और एक NameError उठाया जाता है। अपने चर के दायरे से सावधान रहें, और अधिक इकाई परीक्षण लिखें।

  • पायथन की पूरी तरह से गतिशील प्रकृति के कारण, ऑब्जेक्ट लगभग हमेशा निंदनीय हैं। आमतौर पर आप एक उदाहरण के लिए भी फ़ील्ड और विधियाँ जोड़ सकते हैं और इस प्रकार अनजाने में इसकी स्थिति या विधि सेट को हटा या अधिलेखित कर सकते हैं । एट्रिब्यूटिंग विशेषताएँ सावधान रहें। यह दिलचस्प संभावनाओं के लिए भी अनुमति देता है :)

  • कोई प्रतीकात्मक स्थिरांक नहीं हैं , केवल चर हैं। जांचें कि आप अनजाने में एक 'स्थिरांक' को अधिलेखित नहीं करते हैं। यदि आप सकारात्मक रूप से सुनिश्चित होना चाहते हैं कि आप एक स्थाई को अधिलेखित नहीं कर सकते हैं, तो फ़ंक्शन या संपत्ति (जो प्रच्छन्न रूप में एक फ़ंक्शन है) का उपयोग करें।

  • पायथन के धागे आई / ओ-बाउंड प्रोसेसिंग के लिए अच्छे हैं, लेकिन सीपीयू-बाउंड के लिए नहीं। समानांतर धागों में इसे चलाकर कम्प्यूटेशनल कार्य को गति देने का प्रयास न करें।


+1 बहुत अच्छे अंक। Nitpicking: Noneआमतौर पर कारण बनता है AttributeError(लेकिन बात नहीं करता है, तो आप आमतौर पर यह वैसे भी जरूरत नहीं है) और आप कर सकते हैं (और कुछ मामलों में चाहिए) अपरिवर्तनीय वस्तुओं बारे में (उदाहरण के लिए के माध्यम से namedtuple)।

@danlan: धन्यवाद, मैंने पाठ को सही किया :) हां, आप अपरिवर्तनीय वस्तुएं बना सकते हैं। लेकिन ऐसी वस्तुएँ जो आप आम तौर पर एक नियमित वर्ग बनाकर बनाते हैं और तब के उदाहरण बहुत ही परिवर्तनशील होते हैं, जब तक कि आप कई विशेष उपाय नहीं करते। तथ्य यह है कि एक अपरिभाषित उदाहरण विशेषता के लिए असाइनमेंट आमतौर पर एक त्रुटि पैदा करने के बजाय इसे चुपचाप परिभाषित करता है, जो कि जावा जैमर के लिए एक आश्चर्य हो सकता है।
9000

1
पायथन (और अन्य एफपी भाषा) अधिक जटिल बिल्डिंग ब्लॉकों पर कॉम्पैक्ट कोड बिल्ड के साथ सरल बिल्डिंग ब्लॉकों के अधिक वर्बोस कोड बिल्ड की जगह लेता है। RISC बनाम CISC प्रोसेसर के बारे में सोचें।
पॉल

1
मैं डेटा संरचनाओं में सेट जोड़ूंगा।
साकिस

2
यह सवाल पूछे जाने के बाद से 3 साल से थोड़ा अधिक। मुझे कहना है कि यह सलाह बहुत अच्छी तरह से खड़ी हुई है।
LRE

14

इस लेख को पढ़ें: पायथन जावा नहीं है । (साइडबार के अन्य लेखों में से अधिकांश पढ़ने योग्य हैं, हालांकि जावा-संबंधित नहीं हैं।) लेख कुछ महान संकेत देता है कि जावा प्रोग्रामर अनजाने में गलत तरीके से पायथन (और कैसे नहीं) का उपयोग कर सकते हैं।


6
"एक्सएमएल इसका जवाब नहीं है।" - यह जावा v पायथन से आगे निकलता है ;-)
LRE

3

मैं जावा से पायथन में चला गया और मैंने पाया कि सबसे उपयोगी चीजों में से एक कमांड लाइन दुभाषिया से कोड का परीक्षण करने में सक्षम था। Python को कमांड लाइन में टाइप करें और अपना कोड वहां से तब तक चलाएं जब तक आप इसे सही न कर लें।

पाइथन में फ्रेमवर्क भी थोड़ा कम परिभाषित किया गया था। वहाँ सिर्फ शुरुआत के लिए वेब फ्रेम के 10s काम करता है। अधिक या कम Django स्प्रिंग और SQL कीमिया को हाइबरनेट के लिए प्रतिस्थापित करता है।


2

एक महत्वपूर्ण बात यह है कि गतिशील टाइपिंग को समझना होगा; एक और यह है कि वस्तुएं परस्पर और सार्वजनिक होती हैं। कम महत्वपूर्ण, कम से कम शुरुआत में, नाम बाध्यकारी बनाम चर है।

class MyJob:
    pass        # an empty class
job = MyJob()
job.title = "Ruler of Omicron Persei 8"
job.startDate = "2086"
job.startDate = time.strptime("2035/01/02", "%Y/%m/%d")
myjobtitle = job.title
import new
def myjobduration(self, when):  # create a function
    return when - time.mktime(self.startDate)
MyJob.duration = myjobduration
job.duration(time.time()) # now

यहाँ, myjobtitle और job.title का मान एक ही ऑब्जेक्ट पर इंगित करता है। वर्ग विशेषता job.startDate को पहले एक स्ट्रिंग दी गई है, फिर एक समय ऑब्जेक्ट पर। और यह सब के माध्यम से, नौकरी की आवृत्ति और यहां तक ​​कि कक्षा को ही गतिशील रूप से बदला जा सकता है।


1

तुम भी Jython पर एक नज़र रखना चाहते हो सकता है । यह केवल पायथन 2.5 का समर्थन कर सकता है, लेकिन हम इसे पायथन के साथ तेजी से प्रोटोटाइप में सक्षम होने के लिए वास्तव में शक्तिशाली पाते हैं और यदि आवश्यक हो तो बाद में जावा में फिर से लिखते हैं।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.