आपके पास एक कठिन समय खोजने की विशेषताएं होंगी जो बिल्कुल अनोखी हैं । अस्तित्व में अधिकांश भाषा विशेषताओं को उनकी स्थापना के बाद से एक से अधिक भाषाओं में अपनाया गया है। कुछ दुर्लभ हो सकते हैं, ज्यादातर क्योंकि वे नए हैं और अभी भी अस्पष्टता में हैं, या अच्छे कारण के लिए मर गए। फिर भी, तब भी आप सुविधाओं के संयोजन को देखना बेहतर होगा।
उस ने कहा, पाइथन की कई विशेषताओं को अपेक्षाकृत अद्वितीय संयोजन के लिए बनाना चाहिए। कम से कम मैं ज्यादातर ओवरलैपिंग फीचर सेट के साथ लोकप्रिय (और व्यावहारिक) के रूप में दूर से किसी भी भाषा से अवगत नहीं हूं। जैसा कि टिप्पणियों में उल्लेख किया गया है, रूबी काफी करीब है, लेकिन फिर भी कई अंतर हैं।
- मेटाक्लाज़- आधारित मेटाटोग्रामिंग। मूल रूप से, वर्ग निर्माण पर मध्यस्थ कोड चल रहा है। आवर्ती अंत पर बहुत कम काम के साथ बहुत अच्छे वर्ग के अनुकूलन के लिए बनाता है - उदाहरण के लिए एक वस्तु-संबंधपरक मानचित्रण (ओआरएम) के लिए, ग्राहक वर्गों को कुछ अतिरिक्त लाइनों की तरह सामान्य रूप से लिखा जा सकता है और कोड का एक टन स्वचालित रूप से उत्पन्न होता है। इसका एक उदाहरण 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
ऑब्जेक्ट में लपेटता है ।
- विशुद्ध रूप से ऑफसाइड नियम (परिसीमन ब्लॉकों के लिए संकेत)। मैंने यह अंतिम जानबूझकर रखा। हालांकि यह पायथन को अलग करता है, यह आपके द्वारा उपयोग किए जाने के बाद (या कम से कम यह मेरा अनुभव है) एक बार रोजमर्रा की प्रोग्रामिंग में वास्तव में बाहर नहीं खड़ा होता है।