2010-04-28 15 views
29

जिसे प्राथमिकता दी जाती है ("।" व्हाइटस्पेस को इंगित करता है)?"खाली लाइनों" में पाइथन इंडेंटेशन

एक)

def foo(): 
    x = 1 
    y = 2 
.... 
    if True: 
     bar() 

बी)

def foo(): 
    x = 1 
    y = 2 

    if True: 
     bar() 

मेरे अंतर्ज्ञान बी होगा (वह भी vim मेरे लिए क्या करता है) है, लेकिन मैं एक का उपयोग कर लोगों को देखने) हर समय। क्या यह सिर्फ इसलिए है क्योंकि वहां के अधिकांश संपादकों को तोड़ दिया गया है?

उत्तर

18

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

+8

को संभाल सकता है ए के पक्ष में अच्छे तर्क हैं - खोल में प्रतिलिपि, बी कुछ संपादकों के साथ समस्याएं पैदा करता है। जब तक ए के साथ कोई समस्या न हो, तब तक ऐसा लगता है कि "ए कुछ मामलों में मदद करता है, किसी में दर्द होता है" और इस प्रकार ए का उपयोग किया जाना चाहिए। – Ted

+1

's/^ ([\ t] +) ([^ \ r \ n] *) (\ r? \ N) \ r? \ N/\ 1 \ 2 \ 3 \ 1 \ 3 /'। खोज: किसी लाइन की शुरुआत में टैब या रिक्त स्थान कैप्चर करें, यदि कोई हो, तो कोई भी गैर-न्यूलाइन वर्ण कैप्चर करें, न्यूलाइन कैप्चर करें, न्यूलाइन * ढूंढें। बदलें: इंडेंटेशन, लाइन सामग्री, न्यूलाइन, इंडेंटेशन, न्यूलाइन। चेतावनी: अगर इंडेंटेशन लाइन एक नया ब्लॉक खुलती है, तो रेगेक्स इसका पता नहीं लगाता है और अगली पंक्ति को उसी इंडेंटेशन स्तर पर रखता है। * मैं दूसरे न्यूलाइन प्रारूप को अनदेखा करता हूं और स्थिरता –

0

Emacs मेरे लिए बी) करता है, लेकिन मैं वास्तव में यह मायने रखता है नहीं लगता। ए) का मतलब है कि आप किसी भी टैबबिंग के बिना सही इंडेंटेशन पर एक लाइन में जोड़ सकते हैं।

9

खाली पंक्ति को foo() अंतर्गत आता है यही कारण है कि, तो मैं A पर विचार करेगा सबसे प्राकृतिक होने के लिए। लेकिन मुझे लगता है कि यह सिर्फ राय का विषय है।

+0

मैं मानता हूं कि यह अधिक स्वाभाविक है, और मैं असहमत हूं कि यह राय का विषय है। यह एक तथ्य है। –

3

मैं जरूरी पहला उदाहरण "टूटे" कहते हैं नहीं है, क्योंकि मैं जानता हूँ कि कुछ लोगों को इससे नफरत है जब कर्सर "वापस कूदता" जब कर्सर ऊपर या कोड में नीचे घूम रहा है। जैसे विजुअल स्टूडियो (कम से कम 2008) स्वचालित रूप से उन पंक्तियों पर किसी भी व्हाइटस्पेस वर्णों का उपयोग किए बिना ऐसा होने से रोकता है।

28

आप एक उपयोग करते हैं, आप अजगर खोल में अपने ब्लॉक, बी पेस्ट अप्रत्याशित खरोज त्रुटि प्राप्त होगी नकल कर सकता है।

+0

मैंने आइडलेक्स में ए का उपयोग करने की कोशिश की और इसके बजाय एक अवैध वाक्यविन्यास त्रुटि मिली। – obesechicken13

+0

आईपीथॉन में प्रतिलिपि/चिपकाए जाने पर संस्करण बी अच्छी तरह से काम नहीं करता है। – Mitch

+0

@ obesechicken13 उन बिंदुओं को रिक्त स्थान माना जाता है, वे अभी खींचे गए हैं ताकि आप जानते हैं कि वे वहां हैं। – pydsigner

1

खुला स्रोत विकास में मेरा अनुभव है कि एक कभी नहीं रिक्त लाइनों के अंदर खाली स्थान के छोड़ देना चाहिए है। इसके अलावा किसी को पीछे की सफेद जगह नहीं छोड़नी चाहिए।

यह शिष्टाचार कोडिंग की बात है।

+0

+1 को बढ़ावा देने के लिए केवल पिछले न्यूलाइन प्रारूप का उपयोग करता हूं: मेरे पास मेरी आईडीई स्ट्रिप पीछे की ओर सफेद जगह है। –

+3

ऐसी भाषा में नहीं है जहां इंडेंटेशन पाइथन –

+1

@ लॉरिस इंडेंटेशन कोड के लिए अनिवार्य है लेकिन रिक्त रेखाओं के लिए अनिवार्य नहीं है। इसलिए एक खाली रेखा में कोई भी जगह अनावश्यक है। –

4

TextMate टूट जाता है अगर तुम बी का उपयोग गिर ब्लॉक, और मैं एक वैसे भी पसंद करते हैं, क्योंकि यह अधिक "तार्किक" है।

+0

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

7

रिक्त लाइनों के लिए उचित खरोज (शैली सवाल में एक) जोड़ना बेहद क्योंकि यह यह देखना आसान है कि क्या एक रिक्त पंक्ति के बाद कोड एक ही खरोज ब्लॉक या नहीं का हिस्सा है बनाता प्रदर्शन खाली स्थान के सक्षम के साथ कोड पठनीयता में सुधार।

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

निम्नलिखित पढ़ने की तुलना करें:

def foo(): 
....x = 1 
....y = 2 

....if True: 
........bar() 

एक)

def foo(): 
....x = 1 
....y = 2 
.... 
....if True: 
........bar() 

बी) एक में, यह अब तक स्पष्ट है कि अंतिम दो पंक्तियों foo का हिस्सा हैं। यह उच्च इंडेंटेशन स्तरों पर और भी उपयोगी है।

0

vi स्पष्ट रूप से ए में व्यवहार को हतोत्साहित करता है क्योंकि {/} नेविगेशन अब अपेक्षा के अनुसार काम नहीं करते हैं। git जब आप git diff चलाते हैं तो इसे लाल रंग में हाइलाइट करके स्पष्ट रूप से इसे हतोत्साहित करते हैं। मैं यह भी तर्क दूंगा कि यदि रेखा में रिक्त स्थान हैं तो यह एक खाली रेखा नहीं है।

इसी कारण से मैं दृढ़ता से बी पसंद करता हूं। छः या तो { गति के साथ लाइनों को छोड़ने और वर्ग डीफ़ के शीर्ष पर समाप्त होने की अपेक्षा से भी बदतर कुछ भी नहीं है।

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