मैं Pythonic कोड को प्रभावी ढंग से लिखना कैसे सीख सकता हूं?


46

"पाइथोनिक" के लिए एक Google खोज करने से व्याख्याओं की एक विस्तृत श्रृंखला का पता चलता है। विकिपीडिया पृष्ठ का कहना है:

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

यह "अनहाइथोनिक" शब्द की भी चर्चा करता है:

इसके विपरीत, एकहीन कोड का एक निशान यह है कि यह पायथन में C ++ (या लिस्प, पर्ल या जावा) कोड लिखने का प्रयास करता है - यानी, किसी अन्य भाषा से रूपों के मुहावरेदार अनुवाद के बजाय एक मोटा प्रतिलेखन प्रदान करता है। अजगर की अवधारणा कसकर पठनीयता के न्यूनतम दर्शन के लिए बाध्य है और "इसे करने के एक से अधिक तरीके" से बचने के लिए दृष्टिकोण है। अपठनीय कोड या अकल्पनीय मुहावरे अप्रमाणिक हैं।

"पायथोनिक" शब्द का क्या अर्थ है? मैं इसे प्रभावी ढंग से लागू करने के लिए कैसे सीखूं?


6
मुझे लगता है कि आपके प्रश्न को किसी भी प्रोग्रामिंग भाषा में बढ़ाया जा सकता है। हमेशा प्रोग्रामिंग का एक अनुशंसित तरीका है जो बड़ी संख्या में मामलों में सटीक हो सकता है और संशोधन, पठनीयता और रखरखाव में भी सुधार कर सकता है। मुझे लगता है कि उन सिफारिशों को चुनौती देना भी एक भाषा को विकसित और अग्रिम बना सकता है ...
अमीन

@ सच इतना सच। वास्तव में मुझे लगता है कि एक समुदाय विकि जिसमें भाषा के मुहावरे सीखना ठीक है - सभी भाषाओं के लिए - पर विचार किया जाना चाहिए।
यति सगडे १ '


1
टिप्पणीकार: कृपया अप्रासंगिक टिप्पणी पोस्ट करना बंद करें; उन्हें एक कारण से हटा दिया गया है। यदि आपके पास कोई उत्तर है, तो उसे उत्तर के रूप में छोड़ दें। यदि आप इस प्रश्न के विषय पर चर्चा करना चाहते हैं, तो कृपया चैट का उपयोग करें

1
पायथन का अभ्यास करके!
डायनेमिक

जवाबों:


22

मैंने पाया है कि अधिकांश लोगों की अपनी व्याख्याएं हैं कि "पायथोनिक" का वास्तव में क्या मतलब है। विकिपीडिया से:

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

इसके विपरीत, एकहीन कोड का एक निशान यह है कि यह पायथन में C ++ (या लिस्प, पर्ल या जावा) कोड लिखने का प्रयास करता है - यानी, किसी अन्य भाषा से रूपों के मुहावरेदार अनुवाद के बजाय एक मोटा प्रतिलेखन प्रदान करता है। अजगर की अवधारणा कसकर पठनीयता के न्यूनतम दर्शन के लिए बाध्य है और "इसे करने के एक से अधिक तरीके" से बचने के लिए दृष्टिकोण है। अपठनीय कोड या अकल्पनीय मुहावरे अप्रमाणिक हैं।

मैंने पाया कि नहीं से अधिक बार, और अधिक "pythonic" उदाहरण वास्तव में अजगर मुहावरों के साथ चालाक बनने की कोशिश कर लोगों से और (फिर से, नहीं की तुलना में अधिक बार) अपने कोड लगभग अपठनीय (जो प्रतिपादन प्राप्त कर रहे हैं नहीं pythonic)।

जब तक आप पायथन के मुहावरों से चिपके रहते हैं और पायथन में C ++ (या अन्य भाषा) शैलियों का उपयोग करने से बचते हैं, तब तक आप पायथन हो रहे हैं।

जैसा कि WorldEngineer द्वारा बताया गया है, PEP8 अनुसरण करने के लिए एक अच्छा मानक है (और यदि आप VIM का उपयोग करते हैं, तो PEP8 लाइनिंग के लिए प्लगइन्स उपलब्ध हैं)।


हालांकि वास्तव में, दिन के अंत में, यदि आपका समाधान काम करता है और बिल्कुल खराब नहीं है, तो बनाए रखने और धीमी गति से, कौन परवाह करता है? नहीं की तुलना में अधिक बार, आपका काम एक कार्य करना है, संभव सबसे आकर्षक, पाइथोनिक कोड न लिखें।


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


2
एक अच्छे उत्तर के लिए +1 (उद्धरण के अलावा जब से मैंने इसे ओपी में इस्तेमाल किया है)।

उघ .. शोभा पोस्ट करने से पहले ओपा को फिर से पढ़ना चाहिए: पी
डेमियन ब्रेख्त

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

17

Pythonic को Python में मुहावरेदार तरीके से कोड करना है। इसका मतलब है कि संरचनाओं का उपयोग करना और एक प्रोग्रामिंग दृष्टिकोण से पायथन के लिए अच्छी तरह से काम करना, लेकिन एक समुदाय पढ़ने के दृष्टिकोण से भी। यह बहुत पसंद है कि कैसे और आर लंबे समय तक सी प्रोग्रामिंग शैली के लिए मानक निर्धारित करते हैं। इस गाइड से पता चलता है कि आपको पायथन में मुहावरों को कोड करना है। PEP 8 को उस गाइड में संदर्भित किया गया है, इसलिए यह शायद पढ़ने लायक है।


1
@MattFenwick क्या 90% प्रोग्रामिंग के बारे में नहीं है? अच्छे प्रोग्रामर बहुत समय कोड पढ़ने में बिताते हैं और किस समय में रहते हैं, बहुत सारे कोड लिखते हैं। जितना अधिक पायथोनिक कोड आप पढ़ेंगे, और जितना अधिक आप पायथन में लिखेंगे, आपका कोड उतना ही अधिक पायथन होगा। मुझे नहीं लगता कि यहां कोई शॉर्टकट है।
क्रिश हार्पर

2
बहुत बढ़िया लिंक!
एथन फुरमान

13

"पायथोनिक" कोड IMHO लिखना केवल (V) HLL की प्रभावी उपयोग भाषा को प्रदान करता है। एक सर्वव्यापी उदाहरण के रूप में,

x, y = 7, 'fuhrer'

वह बहुत पाइथोनिक है। मुझे याद है कि जब मैंने केवल पायथन के महीनों के बाद C सीखना शुरू किया,

int x, y = 10, z;

किसी तरह मुझे भ्रमित किया, लेकिन मुझे मेरी C / C ++ जड़ों पर लौटने में एक मिनट लगा।

एक और पायथोनिक तरीका लैम्ब्डा का उपयोग कर रहा है।

l = [1, 2, 3, 4, 5]
print(sorted(l, key=lambda x: -x))

वास्तव lमें अवरोही क्रम में छंटनी होगी ।

तब बहुत अधिक उपयोग किया जाता है, लेकिन बहुत कम समझ में आया "बतख टाइपिंग" - यदि यह चलता है और बतख की तरह बात करता है, तो आप इसे बतख के रूप में मानते हैं। यह है शिथिल अन्य OO भाषाओं में इंटरफेस से संबंधित।

कार्यात्मक प्रोग्रामिंग विधियों का उपयोग करना, जहां लागू हो, जैसे कि मानचित्र का उपयोग और कम करना पायथोनिक माना जाता है।

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


मैंने लिंक को शामिल नहीं किया क्योंकि यह पहले से ही पोस्ट किया गया था जैसा कि मैं टाइप कर रहा था - WorldEngineer का जवाब :) बस अपने और दूसरों के अच्छे के लिए भाषा सुविधाओं का "शोषण" करने के बारे में सोचें, और आपको रास्ते में पायथोनिक मिलेगा, और कृपया इसका अनुसरण करें उस लिंक
yati sagade

4
वास्तव में, कई विवाद है कि map, reduce, lambdaऔर इस तरह के मुहावरेदार दर असल कर रहे हैं। सूची की समझ और जनरेटर की अभिव्यक्ति एक विकल्प है और कई जब भी संभव हो तो उन्हें पसंद करते हैं (विशेष रूप से, वे कम शोर करते हैं जब आपको किसी भी तरह से लंबोदर की आवश्यकता होगी)। उनके पास निश्चित रूप से उनके उपयोग हैं, और अन्य मुहावरों (उदाहरण के लिए डेकोरेटर) में कार्यात्मक प्रोग्रामिंग शो हैं।

@ डलेन ने सहमति व्यक्त की - और इससे भी अधिक जब यह पायथन 3 की बात आती है। निष्कर्ष यह है कि कार्यात्मक सुविधाओं का उपयोग ठीक उसी जगह किया जाना चाहिए जहां आवश्यकता होती है। और वह (इसे करने का केवल एक स्पष्ट तरीका है) मुहावरेदार है :)
यति सगड़े

व्यक्तिगत रूप से, मैंने आपके पहले उदाहरण के लिए लोगों की वरीयताओं को कभी नहीं समझा। यह मानसिक रूप से पार्स करने के लिए बहुत आसान है (जो कि पायथन का ज़ेन है, कोड को अधिक बार पढ़ा जाता है जितना लिखा जाता है): (x, y) = (7, 'fuhrer')- फिर भी मैं लगभग हमेशा "सही" हूं कि बिना parens इसे लिखने का सबसे अच्छा तरीका है!
इजाकाता

2
मैं यह दलील दूंगा कि आपका विशिष्ट छँटाई उदाहरण पायथोनिक नहीं है। यदि आप सिर्फ एक लंबोदर के साथ पुनर्मिलन क्यों कर सकते हैं print(sorted(l, reverse=True)), तो आप स्पष्ट रूप से पाठक को स्पष्ट रूप से बता सकते हैं कि क्या हो रहा है। मुझे आपका पहला उदाहरण भी विवादित लगेगा। यह दो कार्य एक में संपीड़ित है; यह ठीक है, लेकिन मैं इसे बहुत अजगर नहीं कहूंगा। पाठकों को दो कार्य करने की तुलना में यह देखना होगा कि यह क्या करता है।
४:४४ बजे

7
--> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

पायथोनिक कोड है:

  • पठनीय
  • सरल (जितना संभव हो उतना सरल, लेकिन सरल नहीं)
  • सुविचारित

1
+1। पायथन का ज़ेन मुहावरों की सूची का अनुसरण करने से अधिक पायथोनिक कोड लिखने के लिए महत्वपूर्ण है; उत्तरार्द्ध सभी परिस्थितियों को कवर नहीं करेगा।
डोवल

6

जब भी मैंने एक नई भाषा सीखने की कोशिश की है, मैंने पाया है कि जो लोग अपने हाथ की पीठ की तरह भाषा जानते हैं, उनके द्वारा पढ़ना कोड देखना, अजीब लगने वाली किसी भी चीज़ के बारे में पूछना / पूछना और फिर उनकी शैली की नकल करने की कोशिश करना है सबसे अच्छी बात। उदाहरण:

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

डी सीखने के दौरान, चूंकि दस्तावेज़ उस समय बहुत अच्छा नहीं था क्योंकि भाषा बहुत खून बह रहा था, इसलिए मैंने मानक पुस्तकालय को कोड पढ़कर सीखा, विशेष रूप से, आंद्रेई अलेक्जेंड्रेस्कु की कुछ उत्कृष्ट कृतियों में

C ++ सीखने के दौरान, मुझे बहुत अच्छे C ++ प्रोग्रामर से एक कोडबेस विरासत में मिला और संदर्भ, आदि द्वारा STL कंटेनरों को पारित करने के उनके आग्रह से मुहावरेदार C ++ प्रोग्रामिंग के बारे में बहुत कुछ सीखा।

सभी भाषाओं में, मुझे लगता है कि भाषा के बारे में स्टैकऑवरफ़्लो प्रश्नों को ब्राउज़ करना और लोगों को आमतौर पर बुनियादी चीज़ों को पूरा करने के लिए क्या करना है, यह देखना।


एक बार जब आप किसी भाषा की मूल बातें जान लेते हैं, तो कोड पढ़ना किताबों को पढ़ने की तुलना में कहीं अधिक मदद करेगा।
पेस

3

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


2

किसी ने पैराफेरेस से कहा, यह जानने के लिए कि पाइथोनिक क्या है, बस कुछ कोड को हटा दें। मैं इससे असहमत हूं। यदि आप अत्यधिक घने कोड को लिखना पसंद करते हैं, तो यह इसे अधिक पायथोनिक नहीं बनाता है।

अपने आप को यह बताने में मदद करने का एक तरीका कि पाइथोनिक क्या है, जहां तक ​​आपका सवाल है, अपने आप से पूछें "मैं (मतलब आप) पायथन भाषा का उपयोग क्यों करूंगा?" इसके बारे में आपसे क्या अपील है?

मेरे लिए यह पठनीयता और संकलन और खुले स्रोत की कमी (बहुत ज्यादा सब कुछ) है। मैं पुस्तकालयों के लोड टन को कम कर सकता हूं और लाइसेंस के बारे में कम तनाव के साथ कई अन्य भाषाओं में अपने स्रोत कोड को पढ़ सकता हूं।

मेरे लिए अजगर नेत्रहीन है। गुइडो (पाइथन के निर्माता) भी मुझे PEPS और चर्चाओं में अपने उत्तरों के माध्यम से यह साबित करते रहते हैं कि भाषा बनाने के उनके विकल्प मेरे अपने विचारों से श्रेष्ठ हैं कि इसे कैसे बनाया जाना चाहिए था।

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

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

तो पाइथोनिक के दो पहलू हैं। एक वाक्य-रचना है, दूसरी का अभ्यास है। "पायथोनिक" क्या है के गहरे पक्ष की व्याख्या कैसे करें ..?

पायथन में ऐसा करना कोई बड़ी बात नहीं है: alist = ['one', 'two', 'three \ n'] alist.append ((1234, 'Atuple'))

और टपल को सूची में वस्तु प्रकारों के लिए बिना किसी चिंता के जोड़ा जाएगा। पाइथोनिक हिस्सा यह नहीं है कि आप ऐसा कर सकते हैं, बल्कि यह है कि आपका कोड इसे बनाए रखना चाहिए और बस काम / अनुकूलन करना चाहिए।

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


-2

एक अनुशंसित पुस्तक खरीदें। इसे पढ़ें। यह आपको भाषा का उपयोग करने का एक अच्छा आधार देना चाहिए और एक तंत्र में जो सामुदायिक शैली को पूरा करना चाहिए

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