11

मैं पाइथन के लिए काफी नया हूं, और मैं अपना पहला गंभीर ओपन सोर्स प्रोजेक्ट विकसित करना चाहता हूं। मैं पूछना चाहता हूं कि पाइथन परियोजनाओं के लिए सामान्य कोडिंग शैली क्या है। मैं अभी भी जो कर रहा हूं वह भी रखूंगा।पायथन के लिए सामान्य कोडिंग शैली?

1.- सबसे व्यापक रूप से उपयोग की जाने वाली कॉलम चौड़ाई क्या है? (शाश्वत प्रश्न)
मैं वर्तमान में 80 कॉलम पर चिपक रहा हूं (और यह दर्द है!)

2.- किस उद्धरण का उपयोग करना है? (मैंने सबकुछ देखा है और पीईपी 8 में कुछ भी स्पष्ट नहीं है)
मैं सब कुछ के लिए सिंगल कोट्स का उपयोग कर रहा हूं लेकिन डॉकस्ट्रिंग्स, जो ट्रिपल डबल कोट्स का उपयोग करता है।

3.- मैं अपना आयात कहां रखूं?
मैं उन्हें इस क्रम में फ़ाइल शीर्षलेख पर डाल रहा हूं।

import sys 
import -rest of python modules needed- 

import whatever 
import -rest of application modules- 

<code here> 

4.- मैं "आयात whatever.function के रूप में blah" का उपयोग कर सकते हैं?
मैंने कुछ दस्तावेज देखा जो इसे करने की उपेक्षा करते हैं।

5.- इंडेंटिंग के लिए टैब या रिक्त स्थान?
वर्तमान में 4 रिक्त स्थान टैब का उपयोग कर रहे हैं।

6.- परिवर्तनीय नामकरण शैली? मैं सबकुछ के लिए लोअरकेस का उपयोग कर रहा हूं लेकिन कक्षाएं, जिन्हें मैंने ऊंटकेस में रखा था।

आप जो कुछ भी सुझाएंगे?

+3

यदि आप पहले से ही पीईपी 8 देख चुके हैं, तो संभवतः मानक के रूप में व्यापक रूप से स्वीकार नहीं किया गया है ... –

+9

टैब EVIL !! –

+0

@ डेविड: धन्यवाद, मैं फिर पीईपी 8 का पालन करूंगा। @ फ़ज़ी लॉलीपॉप: क्यों? –

उत्तर

18

PEP 8 सभी सामान्य स्टाइल गाइडों की काफी "जड़" है।

Google के Python style guide में कुछ हिस्सों हैं जो काफी अच्छी तरह से विचार किए जाते हैं, लेकिन अन्य लोग मूर्ख हैं (लोकप्रिय चार-स्थान वाले लोगों के बजाय दो-स्थान इंडेंट्स, और कैमेलकेज़ शैली के बजाय कैमेलकेस शैली और विधियों के लिए विधियां हैं, वे हैं सुंदर प्रमुख idiosyncrasies)।

अपने विशिष्ट सवाल पर:

1.- सबसे व्यापक रूप से इस्तेमाल किया स्तंभ चौड़ाई क्या है? (शाश्वत प्रश्न) मैं वर्तमान में 80 कॉलम के लिए चिपके रहा हूँ (और यह एक दर्द है!)

80 कॉलम सबसे लोकप्रिय

2.- क्या उपयोग करने के लिए उद्धरण है? (मैंने सबकुछ देखा है और पीईपी 8 का उल्लेख कुछ भी स्पष्ट नहीं है) मैं सब कुछ के लिए एकल उद्धरण का उपयोग कर रहा हूं लेकिन डॉकस्ट्रिंग्स, जो ट्रिपल डबल कोट्स का उपयोग करता है।

मैं शैली आप उपयोग कर रहे पसंद करते हैं, लेकिन फिर भी Google इस :-(

3.- कहाँ मैं अपने आयात रखूँ के बारे में एक आम सहमति तक पहुँचने में सक्षम नहीं था? मैं डाल रहा हूं उन्हें क्रम में फ़ाइल शीर्षलेख पर।

आयात sys अजगर के बाकी आयात मॉड्यूल needed-

आयात जो कुछ भी आयात आवेदन modules-

हाँ, उत्कृष्ट पसंद है, और लोकप्रिय भी की बाकी।

4.- क्या मैं "आयात के रूप में जो कुछ भी कर सकता हूं" का उपयोग कर सकता हूं? मैंने कुछ दस्तावेज देखा जो इसे करने की उपेक्षा करते हैं।

मैं दृढ़ता से अनुशंसा करता हूं कि आप हमेशा मॉड्यूल आयात करें - मॉड्यूल के अंदर से विशिष्ट नाम नहीं। यह सिर्फ शैली नहीं है - मजबूत फायदे हैं उदा। ऐसा करने में टेस्टेबिलिटी में। मॉड्यूल के नाम को छोटा करने या संघर्ष से बचने के लिए as खंड ठीक है।

5.- इंडेंटिंग के लिए टैब या रिक्त स्थान? वर्तमान में 4 रिक्त स्थान टैब का उपयोग कर रहे हैं।

अत्यधिक लोकप्रिय।

6.- परिवर्तनीय नामकरण शैली? मैं सबकुछ के लिए लोअरकेस का उपयोग कर रहा हूं लेकिन वर्ग, जो मैंने ऊंटकेस में रखा है।

लगभग हर कोई अपरकेस प्रारंभिक और सभी अपरकेस के साथ स्थिरांक वाले वर्गों का नाम देता है।

+0

धन्यवाद! मैं कार्यों के बजाए मॉड्यूल आयात करने पर आपकी सलाह का पालन करूंगा :) –

+5

यहां अपडेट करें, Google की स्टाइल गाइड ने दो idiosyncrasies का उल्लेख किया है और अब पीईपी 8 के साथ लाइन में है) इंडेंटेशन के लिए 4 रिक्त स्थान: https: //google.github .io/styleguide/pyguide.html # इंडेंटेशन, और 2) कार्यों और विधियों के लिए अंडरस्कोर: https://google.github.io/styleguide/pyguide.html#Naming – skeller88

2

1.- अधिकांश लोगों के पास अब 16: 9 या 16:10 मॉनिटर है। यहां तक ​​कि यदि उनके पास विस्तृत स्क्रीन नहीं है, तो उनके पास बहुत सारे पिक्सल हैं, 80 कोल्स एक बड़ा व्यावहारिक सौदा ब्रेकर नहीं है जैसे कि जब कोई रिमोट टर्मिनल विंडो में कमांड लाइन पर 4: 3 मॉनिटर पर हैकिंग कर रहा था 320 एक्स 240. मैं आमतौर पर लाइन को समाप्त करता हूं जब यह बहुत लंबा हो जाता है, जो व्यक्तिपरक होता है। मैं 23 "मॉनिटर एक्स 2 पर 048 एक्स 1152 पर हूं।

2.- डिफ़ॉल्ट रूप से सिंगल कोट्स इसलिए आपको डबल कोट्स, डबल कोट्स से बचने की ज़रूरत नहीं है जब आपको सिंगल कोट्स एम्बेड करने की आवश्यकता होती है, और ट्रिपल कोट्स एम्बेडेड नई-पंक्तियों के साथ तार।

3.- उन्हें फ़ाइल के शीर्ष पर रखो, कभी कभी आप उन्हें मुख्य समारोह में डाल अगर वे मॉड्यूल के लिए विश्व स्तर पर आवश्यक नहीं हैं।

4. यह कुछ मॉड्यूल का नाम बदलने के लिए एक आम मुहावरे है। एक अच्छा उदाहरण निम्नलिखित है।

try: 
    # for Python 2.6.x 
    import json 
except ImportError: 
    # for previous Pythons 
    try: 
     import simplejson as json 
    except ImportError: 
     sys.exit('easy_install simplejson') 

लेकिन सिर्फ एक वर्ग या समारोह आयात करने के लिए पसंदीदा तरीका वैकल्पिक as yyy साथ from module import xxx है अगर

5.- हमेशा रिक्तियों का उपयोग की जरूरत है! 2 या 4 जब तक कोई टैब्स

6.- कक्षाओं को अपरकेस कैमेल स्टाइल अप करना चाहिए, चर कभी-कभी कम होते हैं कम से कम कम कैमेल्स या कभी-कभी all_lowecase_separated_by_underscores, फ़ंक्शन नाम हैं। "कॉन्स्टेंट्स" होना चाहिए ALL_UPPER_CASE_SEPARATED_BY_UNDERSCORES

जब संदेह में PEP 8, पाइथन स्रोत, कोड आधार में मौजूदा सम्मेलनों का संदर्भ लें।लेकिन सबसे अधिक आयात की बात आंतरिक रूप से जितनी संभव हो सके संगत है। सभी पायथन कोड ऐसा दिखना चाहिए जैसा कि कभी भी संभव हो उसी व्यक्ति द्वारा लिखा गया था।

+0

धन्यवाद, मॉड्यूल नामकरण पर अच्छा उदाहरण: डी –

+0

80 कॉलम आपको फ़ोन/हैंडहेल्ड पर कोड करने देता है, और जब मुझे टर्मिनल के माध्यम से कुछ करने की आवश्यकता होती है (यानी: एक्स सर्वर उड़ाता है), यह बहुत आसान है क्योंकि 80 कॉलम हमेशा इसमें फिट बैठते हैं। इसके अलावा मेरी सभी स्क्रीनें दो 80 कॉलम विंडोज़ तरफ फिट बैठती हैं, और मेरे पास आमतौर पर क्रॉस रेफरेंसिंग के लिए 4+ स्रोत खुलते हैं। यदि आप चीजों को बहुत ऊर्ध्वाधर बनाते हैं तो इसका पालन करना कठिन होता है ... मुझे लगता है कि यह वास्तव में कोई फर्क नहीं पड़ता क्योंकि आप ऑटो फॉर्मेटर का उपयोग कर सकते हैं ... –

+3

+1 80-कॉलम रैपिंग के दुर्लभ सामान्य ज्ञान के लिए +1। 80 कॉलम पर लपेटने के लिए पीईपी 8 सलाह दिनांकित होने पर भी दिनांकित थी, और मैंगल कोड के अलावा कुछ भी नहीं करता है। 120 कॉलम या तो लपेटें। यदि कोई भी * वास्तव में * 80x25 में कोड संपादित कर रहा है, तो वे लाइव रहेंगे। 80-कॉलम रैपिंग कमेंट्री के लिए –

1

चूंकि मैं वास्तव में "स्टाइलिंग" के बारे में पागल हूं, इसलिए मैं उन दिशा-निर्देशों को लिखूंगा जो मैं वर्तमान में करीब 8k एसएलओसी परियोजना में लगभग 35 फाइलों के साथ उपयोग करता हूं, जिनमें से अधिकांश पीईपी 8 से मेल खाते हैं।

  1. पीईपी 8 कहता है 79 (डब्ल्यूटीएफ?), मैं 80 के साथ जाता हूं और अब इसका उपयोग किया जाता है। सब के बाद कम आंख आंदोलन!

  2. डॉकस्ट्रिंग्स और सामान जो '' 'में कई पंक्तियों को फैलाते हैं। '' में बाकी सब कुछ। इसके अलावा मुझे डबल कोट्स पसंद नहीं हैं, मैं केवल हर समय सिंगल कोट्स का उपयोग करता हूं ... अनुमान है कि ऐसा इसलिए है क्योंकि मैं जावास्क्रिप्ट कोने का निर्माण करता हूं, जहां यह भी आसान है '', क्योंकि इस तरह से आपको सभी से बचने की ज़रूरत नहीं है एचटीएमएल सामग्री: ओ

  3. सिर पर, कस्टम एप्लिकेशन कोड से पहले अंतर्निहित। लेकिन मैं "असफल प्रारंभिक" दृष्टिकोण के साथ भी जाता हूं, इसलिए अगर ऐसा कुछ है जो संस्करण निर्भर करता है (उदाहरण के लिए जीटीके) तो मैं इसे पहले आयात करूंगा।

  4. निर्भर करता है, ज्यादातर बार मैं आयात foo और foo आयात से जाता हूं, लेकिन वहां कुछ निश्चित मामले (ईजी नाम पहले से ही किसी अन्य आयात द्वारा परिभाषित किया गया है) क्या मैं फू आयात बार से ब्लै के रूप में भी उपयोग करता था।

  5. 4 स्पेस। अवधि। यदि आप वास्तव में टैब का उपयोग करना चाहते हैं, तो एससीएम के साथ काम करते समय उन्हें स्थानांतरित करने से पहले उन्हें रिक्त स्थान में कनवर्ट करना सुनिश्चित करें। लेकिन कभी नहीं (!) मिक्स टैब्स और स्पेस !!! यह भयानक बग पेश कर सकता है और कर सकता है।

  6. some_method या foo_function, एक कॉन्स्टेंट, MyClass।

इसके अलावा, आप मामलों में खरोज जहां एक विधि कॉल या कुछ और कई पंक्तियों तक फैला के बारे में लोगों का तर्क है सकते हैं, और आप के बारे में जो लाइन निरंतरता शैली आप का उपयोग करेगा का तर्क कर सकते हैं। या तो () के साथ सबकुछ घिराएं या लाइन चीज़ के अंत में \ करें। मैं बाद वाला करता हूं, और मैं अगली पंक्ति की शुरुआत में ऑपरेटरों और अन्य सामान भी रखता हूं।

# always insert a newline after a wrapped one 
from bla import foo, test, goo, \ 
       another_thing 

def some_method_thats_too_long_for_80_columns(foo_argument, bar_argument, bla_argument, 
               baz_argument): 

    do_something(test, bla, baz) 

    value = 123 * foo + ten \ 
      - bla 

    if test > 20 \ 
     and x < 4: 

     test_something() 

    elif foo > 7 \ 
     and bla == 2 \ 
     or me == blaaaaaa: 

     test_the_megamoth() 

इसके अलावा, मैं तुलना के संचालन के लिए कुछ दिशानिर्देश हैं, मैं हमेशा None True False के खिलाफ जांच करने के लिए is(not) का उपयोग करें और मैं if foo: की तरह एक अंतर्निहित बूलियन तुलना ऐसा कभी नहीं, मैं हमेशा if foo is True: करते हैं, गतिशील टाइपिंग अच्छा है लेकिन कुछ मामलों में मैं बस यह सुनिश्चित करना चाहते हैं कि चीज सही चीज करे!

एक और चीज जो मैं करता हूं वह कभी भी खाली तारों का उपयोग नहीं करना है! वे एक स्थिरांक फ़ाइल में हैं, शेष कोड में मेरे पास username == UNSET_USERNAME या label = UNSET_LABEL जैसी चीजें हैं, यह इस तरह से और अधिक वर्णनात्मक है!

मैं भी कुछ सख्त खाली स्थान के दिशा निर्देशों और अन्य पागल सामान है, लेकिन मुझे यह पसंद है (क्योंकि मैं इसके बारे में पागल हूँ), मैं भी एक स्क्रिप्ट जो मेरे कोड की जांच लिखा है:
http://github.com/BonsaiDen/Atarashii/blob/master/checkstyle

चेतावनी (!): यह आपकी भावनाओं को चोट पहुंचाएगा! जेएसलिंट से भी अधिक ...

लेकिन यह सिर्फ 2 सेंट है।

+2

79 diff मार्कअप के लिए एक अतिरिक्त कॉलम छोड़ देता है। –

+0

मेरी 2048X1152 मॉनिटर 12 अंकों पर 180 कॉलम पर diff मार्कअप के लिए बहुत सारी जगह छोड़ देता है! –

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