पायथन की कुछ विशेषताएं क्या हैं जो इसे अपनी भाषा के रूप में अद्वितीय बनाती हैं? [बन्द है]


12

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

मैं यहाँ एक नवाब हूँ, इसलिए सहज ज्ञान युक्त बातों को समझाने की आवश्यकता हो सकती है .....


9
पायथन अद्वितीय नहीं है, इसमें एक भी अनूठी विशेषता नहीं है जो किसी अन्य भाषा में नहीं देखी गई है।
एसके-लॉजिक

10
यह एकमात्र ऐसी भाषा है जिसे मैं जानता हूं कि इसका नाम मोंटी पाइथन के नाम पर रखा गया है ...
yannis

@ SK- तर्क विशेषताओं के बारे में है, जिनमें से विशेषताएँ एक सबसेट हैं। क्या पायथन के लिए कोई विशिष्ट विशेषताएं नहीं हैं?
कोजिरो

@ कोकोजी, मैंने कभी भी "विशेषता" की औपचारिक परिभाषा नहीं देखी है, इसलिए मैं अनुमान नहीं लगाना चाहूंगा।
एसके-लॉजिक

1
@ कोकोजी, पीएल सुविधाओं को आमतौर पर इसके सिंटैक्स और शब्दार्थ दोनों के रूप में समझा जाता है। और दोनों औपचारिक रूप से परिभाषित हैं।
लॉजिक

जवाबों:


22

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

उस ने कहा, पाइथन की कई विशेषताओं को अपेक्षाकृत अद्वितीय संयोजन के लिए बनाना चाहिए। कम से कम मैं ज्यादातर ओवरलैपिंग फीचर सेट के साथ लोकप्रिय (और व्यावहारिक) के रूप में दूर से किसी भी भाषा से अवगत नहीं हूं। जैसा कि टिप्पणियों में उल्लेख किया गया है, रूबी काफी करीब है, लेकिन फिर भी कई अंतर हैं।

  • मेटाक्लाज़- आधारित मेटाटोग्रामिंग। मूल रूप से, वर्ग निर्माण पर मध्यस्थ कोड चल रहा है। आवर्ती अंत पर बहुत कम काम के साथ बहुत अच्छे वर्ग के अनुकूलन के लिए बनाता है - उदाहरण के लिए एक वस्तु-संबंधपरक मानचित्रण (ओआरएम) के लिए, ग्राहक वर्गों को कुछ अतिरिक्त लाइनों की तरह सामान्य रूप से लिखा जा सकता है और कोड का एक टन स्वचालित रूप से उत्पन्न होता है। इसका एक उदाहरण Django के "मॉडल" हैंattr = SomeDataType()
  • आपको हर चीज के लिए पुनरावृत्तियों का उपयोग करने के लिए प्रोत्साहित किया जाता है । यह विशेष रूप से 3.x में स्पष्ट है, जहां एक इट्रेटर-आधारित समकक्ष के साथ अधिकांश सूची-आधारित विकल्प बाद के पक्ष में समाप्त कर दिए गए हैं। Iterators संग्रह के लिए निग-यूनिवर्सल इंटरफ़ेस के रूप में भी काम करते हैं (उन दोनों को जो आपके पास वास्तव में स्मृति में हैं और जिन्हें आपको केवल एक बार की आवश्यकता है और इस प्रकार नीचे की विशेषताओं के साथ बनाएं)। संग्रह-अज्ञेयवादी, स्पेस-इफिसेंट ( O(1)मध्यवर्ती परिणामों के लिए स्थान अक्सर स्वाभाविक रूप से अनुसरण करता है, बहुत कम कार्यों को वास्तव में एक बार में सभी वस्तुओं की आवश्यकता होती है), कंपोजेबल डेटा क्रंचिंग कभी भी आसान नहीं रहा है।
  • जनरेटर के भाव, उपरोक्त से संबंधित। कई लोगों ने सूची की समझ के बारे में सुना होगा (एक अन्य पुनरावृत्ति से एक सूची बनाना, फ़िल्टर करना और प्रक्रिया में मैपिंग, बहुत सुविधाजनक वाक्यविन्यास के साथ)। उनके बारे में भूल जाओ, वे एक विशेष मामला है, सिंथेटिक चीनी है। जेनरेटर के भाव वाक्यात्मक रूप से बहुत नज़दीक होते हैं और अंततः परिणाम बहुत ही क्रम के होते हैं, लेकिन वे परिणाम को आलसी बनाते हैं (और इस प्रकार O(1)स्थान लेते हैं जब तक कि आप स्पष्ट रूप से परिणामों को इधर-उधर न रखें)।
  • yield, जो मुख्य रूप से राइटर्स (यहाँ जनरेटर कहा जाता है) दूर के अच्छे लेखन करते हैं। वे ऊपर के बड़े भाई हैं, सभी प्रकार के नियंत्रण प्रवाह का समर्थन करते हैं। C # में समान कीवर्ड के साथ कुछ समान है। लेकिन yieldसीमित प्रकार के कोरटाइन (उदाहरण के लिए Lua के पास अधिक विस्तृत समर्थन है) का समर्थन करने के लिए अतिभारित है, जो अभी भी कठिन समस्याओं पर काम करने वाले चतुर लोगों द्वारा अच्छे उपयोग के लिए डाला गया है। मेरे सिर के ऊपर से दो उदाहरण: पुनरावर्ती और कोई स्टैक सीमा और अतुल्यकालिक I / O (सुविधाजनक वाक्य रचना के साथ) के साथ पुनरावर्ती वंश पार्सिंग
  • बहु-लक्ष्य असाइनमेंट और चलने योग्य अनपैकिंग। स्टेरॉयड पर असाइनमेंट। न केवल आप एक बार में कई मानों को निर्दिष्ट कर सकते हैं (मानों की अदला-बदली के लिए भी और जब पुनरावृत्ति करते हैं - for key, value in mapping.items()), तो आप ज्ञात लंबाई के किसी भी चलने योग्य (ईमानदारी से, ज्यादातर ट्यूपल) को कई चर में अनपैक कर सकते हैं। 3.x के बाद से यह अज्ञात लंबाई के संग्रह के लिए भी व्यावहारिक है क्योंकि आप एकल आइटम लेने वाले कुछ चरों को निर्दिष्ट कर सकते हैं और जो कुछ भी शेष रहता है first, *everything_in_between, last = values:।
  • डिस्क्रिप्टर , संभवतः विशेषता पहुंच को अनुकूलित करने के विभिन्न तरीकों में से सबसे शक्तिशाली है। वहाँ गुण हैं (सी # के रूप में, लेकिन विशेष भाषा समर्थन के बिना), स्थिर तरीकों, वर्ग विधियों, आदि सभी विवरणकर्ता के रूप में लागू किए गए हैं। वे प्रथम श्रेणी की वस्तुएं भी हैं। अभी एक हफ्ते पहले, मुझे संपत्तियों में दोहराव और मुश्किल कोड का सामना करना पड़ा है - इसलिए मैंने एक छोटा सा फ़ंक्शन लिखा जो दोहराव वाले हिस्से को उत्पन्न करता है और इसे एक properyऑब्जेक्ट में लपेटता है ।
  • विशुद्ध रूप से ऑफसाइड नियम (परिसीमन ब्लॉकों के लिए संकेत)। मैंने यह अंतिम जानबूझकर रखा। हालांकि यह पायथन को अलग करता है, यह आपके द्वारा उपयोग किए जाने के बाद (या कम से कम यह मेरा अनुभव है) एक बार रोजमर्रा की प्रोग्रामिंग में वास्तव में बाहर नहीं खड़ा होता है।

मैं अभी भी रूबी में थोड़ा नया हूँ, लेकिन मुझे लगता है कि सभी हिट लेकिन अंतिम बिंदु भी? किसी भी तरह से मैं मानता हूं "अद्वितीय" शायद पायथन में नहीं मिलेगा लेकिन "अन्य शीर्ष भाषाओं के बीच आम नहीं" हो सकता है।
ऋग

@ रिग: मैं रूबी विशेषज्ञ नहीं हूं, लेकिन मैंने न तो मेटाक्लस (रूबी निश्चित रूप से बस रूपक के बारे में शक्तिशाली के रूप में शक्तिशाली देखा है, और इसे समान छोरों के लिए उपयोग कर सकता है, लेकिन मेरी धारणा यह है कि यह अलग तरह से हासिल की गई है), न ही जनरेटर या जनरेटर अभिव्यक्ति (हालांकि वहाँ कोरटाइन्स लगते हैं), न ही चलने योग्य अनपैकिंग (हालांकि बहु-लक्ष्य असाइनमेंट है) और न ही रूबी में वर्णनकर्ता। हां, रूबी और पायथन ओवरलैप करते हैं। लेकिन मतभेद हैं

अच्छा, +1। मेरे लिए, "स्टेरॉयड पर असाइनमेंट" वास्तव में "खराब आदमी का पैटर्न मिलान" है, लेकिन अविश्वसनीय रूप से उपयोगी है फिर भी :) मैं यह भी नोटिस करूंगा कि फंक्शन में पैरामीटर कितना लचीला है: *argsऔर **kwargs, टुपल्स और मापदंडों को मैप करने का दर्दनाक तरीका, आदि। ।
9000

मेरा मानना ​​है कि CLOS के साथ आम लिस्प सभी लेआउट-आधारित सिंटैक्स के उपयोग को छोड़कर हिट करता है। हास्केल ऑब्जेक्ट-ओरिएंटेड नहीं है (हालाँकि ओओ एक्सटेंशन हैं) लेकिन मेटाक्लस पॉइंट के अलावा मेरा मानना ​​है कि यह इन सभी विशेषताओं से मेल खाता है।
जूल्स

3

मैं केवल एक चीज का अनुमान लगाता हूं जो पायथन को विशिष्ट बनाता है यह उन विशेषताओं का विशेष संयोजन है जो इसे उजागर करता है। यह अधिकांश प्रोग्रामिंग भाषाओं के लिए सही होगा।

या एक छोटी सी बात हो सकती है: मैंने पायथन को स्पष्ट selfरूप से किसी भी अन्य भाषा में किए गए ऑब्जेक्ट सदस्य कार्यों के लिए एक औपचारिक पैरामीटर के रूप में पास करने का तरीका नहीं देखा है । यह एक छोटी सी बात है, और मैं नहीं देखता कि यह वास्तव में कुछ भी कैसे बदलता है।

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


@ डलेन: आह, मैं " एक औपचारिक पैरामीटर के रूप में स्पष्ट रूप से स्वयं को पास करने से चूक गया" .. अनुमान है कि मुझे 2 बजे तक क्या मिलेगा;)
डेमियन ब्रेख्त

4
ओबेरॉन में स्पष्ट स्व भी होता है, fwiw
grrussel

एक स्पष्ट स्व पैरामीटर का उपयोग आम लिस्प ऑब्जेक्ट सिस्टम में भी किया जाता है। CLOS बहु-विधियाँ प्रदान करता है, हालांकि, जिसका अर्थ है कि स्व पैरामीटर किसी भी तरह से विशेष नहीं है, जैसे कि यह अजगर में है।
जूल्स

1

अपने मालिक के गुण बनने के लिए डॉकस्ट्रिंग्स का स्वचालित प्रसंस्करण। सामान्य तौर पर पायथन की सभी शानदार आत्मनिरीक्षण विशेषताएं इसे एक बहुत ही अनोखी भाषा बनाती हैं, __doc__जो किसी वस्तु की प्रथम श्रेणी की संपत्ति के रूप में उपयोग करने की क्षमता () का उपयोग करने की क्षमता से होती है। उदाहरण के लिए:

>>> class DocStringException(Exception):
...     """Error message is the same as docstring"""
...     def __str__(self):
...         return repr(self.__doc__)
... 
>>> class ExampleException(DocStringException):
...     """An example happened"""
... 
>>> raise ExampleException
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.ExampleException: 'An example happened'

अन्य उपयोगी आत्मनिरीक्षण विशेषताएं:

  • help / help () - किसी वस्तु के साथ दुभाषिया / मदद की मदद
  • कीवर्ड - पायथन कीवर्ड
  • स्थानीय () - स्थानीय नाम प्राप्त करें
  • ग्लोबल्स () - वैश्विक नाम प्राप्त करें
  • dir () - एक ऑब्जेक्ट के गुण और विधियाँ प्राप्त करें
  • .mro विधि , issubclass - वंशानुक्रम को समझना
  • id () - किसी ऑब्जेक्ट का मेमोरी एड्रेस प्राप्त करें

रूबी में बहुत शक्ति है, जैसा कि कॉमन लिस्प, क्लोजर और कई अन्य, गतिशील भाषाएं मानती हैं।
Torbjørn

@ Torbjørn कौन सी शक्ति? स्वत: प्रलेखन, या आत्मनिरीक्षण सुविधाएँ?
कोजीरो

मैं दोनों के बारे में सोच रहा था। ठीक-ठीक कहावत नहीं, बल्कि भावना में। मुझे विश्वास नहीं होता कि रूबी के पास एक ही दस्तावेज़ीकरण क्षमता है, लेकिन यह सुनिश्चित करने के लिए आत्मनिरीक्षण किया जाता है। सीएल और क्लोजर में दोनों विशेषताएं हैं - और मेरा मानना ​​है कि आत्मनिरीक्षण वहाँ से परे है जो आपको पायथन में मिलेगा, क्योंकि यह होमोसेक्सुअल है
Torbjørn

1
  1. Generator Expressions
  2. input()मुझे समझाने दें, मैंने एक भाषा (अब तक) नहीं देखी है, जहां आप किसी स्टेटमेंट के लिए एक वैल्यू असाइन कर सकते हैं जो कुछ प्रिंट करता है, यह रूबी की तरह है print/gets, लेकिन प्रिंट के लिए असाइन किए गए मान के बजाय:print "Foo" bar = gets
  3. yield
  4. कई प्रकार के डेटासेट: ordereddict, namedtuple, array, list, tuple, dictionary

जेनरेटर एक्सप्रेशन्स का उपयोग करते हुए हास्केल में जेनरेटर एक्सप्रेशन्स को लागू किया जा सकता है (अजगर सूचियाँ आलसी हैं, अजगर लिस्ट्स के विपरीत, इसलिए इसके लिए कोई विशेष वाक्यविन्यास की आवश्यकता नहीं है)। "इनपुट" से मुझे लगता है कि आप उस नाम के अजगर 3 फ़ंक्शन का अर्थ है (जैसा कि अजगर 2 फ़ंक्शन खतरनाक है और इसका उपयोग नहीं किया जाना चाहिए)। यह सच है कि यह व्यवहार का एक असामान्य संयोजन है (हालांकि यह जावास्क्रिप्ट में मौजूद है - window.prompt - और BASIC, जो कि मुझे लगता है कि जहां से अजगर ने इसे उधार लिया था), लेकिन इसे प्रोग्रामर द्वारा तुच्छ रूप से लागू किया जा सकता है ("इनपुट s =" putStrLn s >> getStrLn "haskell के लिए करेगा)।
जूल्स

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

-2

बात यह है कि, पायथन बहुत कम भाषाओं में से है, जिसमें अत्यधिक कम गति वाले ओवरहेड हैं जो इसे जबरदस्त अभिव्यंजक शक्तियां प्रदान करते हैं: सूची / सेट / तानाशाही समझ, उपज, सज्जाकार, eval, मेटा क्लास प्रोग्रामिंग, आत्मनिरीक्षण, अनुकूलित निर्मित डेटा संरचना (सूची) dicts, सेट), उन सभी चीजों को आप (डेवलपर) को अपने विचारों को संक्षिप्त और सुरुचिपूर्ण कोड में व्यक्त करने की शक्ति देने में बहुत अच्छा लगता है। मैं वास्तव में संयुक्त रूप से सुविधाओं के इस हत्यारे सेट के साथ किसी भी अन्य भाषाओं के बारे में नहीं सोच सकता।


1
यदि आपको लगता है कि पायथन में कम सिंटैक्टिक ओवरहेड है (एक जटिल जटिल व्याकरण और एक अपेक्षाकृत बड़ी मात्रा में सिंटैक्स चीनी होने के बावजूद), तो आप स्कीम के बारे में क्या सोचते हैं?
तिखन जेल्विस

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

-4

मैं कहूंगा कि यह बयान और लूप को संलग्न करने के लिए इंडेंटेशन का उपयोग है। किसी अन्य भाषा में नहीं देखा है।

मुझे लगता है कि यह बहुत आसान है क्योंकि यह अजगर कोड को बाधित करने के लिए काफी अधिक कठिन बनाता है!

यह कार्यों के अपवाद के साथ लाइन तरीके से एक साफ लाइन में निष्पादित करने के लिए भी लगता है, और इसे ऐसे भी व्याख्या किया जा सकता है जो अच्छा है।


2
विकिपीडिया भाषाओं से भरी एक स्क्रीन जानता है जो इसे करती भी है। इसे ऑफ-साइड नियम कहा जाता है ।

3
मुझे समझ में नहीं आता है कि यह कार्यों के अपवाद के साथ लाइन तरीके से एक साफ लाइन में निष्पादित करने के लिए भी लगता है, और इसे ऐसे भी व्याख्या किया जा सकता है जो अच्छा है। इसका क्या मतलब है?
कोजीरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.