2009-07-14 9 views
48

कोडिंग पायथन के दौरान मैं इंडेंट के लिए केवल 2 रिक्त स्थान का उपयोग कर रहा हूं, सुनिश्चित करें कि PEP-8 वास्तव में 4 रिक्त स्थान रखने की अनुशंसा करते हैं, लेकिन ऐतिहासिक रूप से मेरे लिए यह असामान्य है।पायथन: इंडेंटेशन के लिए 4 रिक्त स्थान का उपयोग करना। क्यूं कर?

तो, क्या कोई मुझे 2 के बजाय 4 रिक्त स्थान का उपयोग करने के लिए मना सकता है? क्या पेशेवर और विपक्ष?

पीएस और आखिरकार, सभी मौजूदा कोडबेस को 2 रिक्त स्थान से 4 रिक्त स्थान में बदलने का आसान तरीका क्या है?


पी.पी.एस. पीईपी -8 भी सख्ती से संकेत के लिए टैब का उपयोग न करने की सलाह देते हैं। read here


तो, संक्षेप में प्रस्तुत करने के लिए:

सकारात्मक:

  • जब स्ट्रिंग 80 से अधिक लाइनों लंबे wraping व्यवस्था करने के लिए और अधिक स्थान है।
  • स्निपेट से कोड कॉपी कर सकते हैं और यह बस काम करता है।

विपक्ष:

    नेस्टेड बयान के गहरे स्तर के साथ
  • आप वास्तविक कोड के लिए कम जगह है।

धन्यवाद।

+6

आप इसे एक समुदाय विकी बनाना चाहते हैं या यह शायद बंद हो जाएगा। यह एक बहुत ही विवादास्पद विषय है कि हर किसी के पास अपनी राय है। – MitMaro

+0

@ मितमारो: मैं मानता हूं कि यह अत्यधिक व्यक्तिपरक है; हालांकि यह ध्यान देने योग्य है कि पीएस हिस्सा एक वैध सवाल है। – DrAl

+0

@AI: दो अलग-अलग प्रश्न होना चाहिए – MitMaro

उत्तर

79

हर कोई 4 रिक्त स्थान का उपयोग करता है। यही कारण है कि मैं 4 रिक्त स्थान का उपयोग करने का एकमात्र कारण हूं जो मैंने पार किया है और स्वीकार कर लिया है। मेरे दिल में, मैं अभी भी टैब का उपयोग करना चाहता हूं (1 इंडेंट कैरेक्टर प्रति इंडेंट, समझ में आता है, नहीं? अन्य सफेद जगह से अलग इंडेंट। मुझे कोई परवाह नहीं है कि टैब प्रदर्शित हो सकते हैं, जो कि विभिन्न चौड़ाई के रूप में है, जो कोई वाक्यविन्यास अंतर नहीं बनाता है। सबसे बुरा यह हो सकता है कि कुछ टिप्पणियां लाइन नहीं हो रही हैं। डरावनी!) लेकिन मैंने स्वीकार किया है कि चूंकि पाइथन समुदाय पूरी तरह से 4 रिक्त स्थान का उपयोग करता है, इसलिए मैं 4 रिक्त स्थान का उपयोग करता हूं। इस तरह, मैं दूसरों द्वारा लिखे गए स्निपेट से कोड इकट्ठा कर सकता हूं, और यह सब काम करता है।

+2

मुझे लगता है कि आपका मतलब 4 रिक्त स्थान है, 4 टैब नहीं;) – fortran

+0

डी ओह। फिक्स्ड। :) – Markus

+17

"इस तरह, मैं दूसरों द्वारा लिखे गए स्निपेट से कोड इकट्ठा कर सकता हूं, और यह सब काम करता है ..." और यह _my_ कोड के रूप में दिखता है और महसूस करता है :) – xtofl

4

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

परिवर्तन करने के लिए, आपको बस सभी प्रारंभिक रिक्त स्थानों को उन लोगों तक बदलने की आवश्यकता है जो दो गुना अधिक हैं। इसे करने के कई तरीके हैं; विम पाठ संपादक में, मैं दो के बारे में सोच सकते हैं: सबसे पहले:

:%s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2) 

यह एक साधारण नियमित अभिव्यक्ति है कि रेखा के शुरू में स्थानों में से एक या एक से अधिक जोड़े के लिए लग रहा है और उन्हें दो बार के रूप में कई रिक्तियों के साथ की जगह है जैसा पाया गया था। इसके साथ vim खोलने से सभी फाइलों को ऐसा करने के लिए बढ़ाया जा सकता है:

vim *.py 

(या समकक्ष), (untested) द्वारा पीछा किया:

:argdo %s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)/ | w 

वैकल्पिक रूप से:

" Switch to hard tabs: 
:set noexpandtab 
" Set the tab stop to the current setting 
:set tabstop=2 
" Change all spaces to tabs based on tabstop 
:retab! 
" Change the tab stop to the new setting 
:set tabstop=4 
" Go back to soft tabs 
:set expandtab 
" Replace all the tabs in the current file to spaces 
:retab 
बेशक

, कई अन्य टूल्स समान विशेषताएं प्रदान करेंगे: अगर sed, awk, perl या python जैसे कुछ ऐसा नहीं कर पाए तो मुझे आश्चर्य होगा: asily।

2

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

एक कारण है जो कोडिंग शैली मानक को अपनाने के दौरान वैध नहीं है: क्योंकि आपको यह पसंद है। कोडिंग मानकों का सटीक रूप से अस्तित्व में है क्योंकि लोगों की प्राथमिकताएं अलग-अलग होती हैं, और यदि उनके पास छोड़ दिया जाता है, तो अराजकता सभी के नुकसान के लिए होती है।

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

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

11

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

इसमें "टैब" की ऐतिहासिक परिभाषा के लिए "अर्ध-टैब" w/r होने का भी उछाल है।

इसके अलावा, जो भी आपके समूह को पसंद है उसका उपयोग करें। यह चॉकलेट बनाम वेनिला की तरह है।

स्विच करने का एक आसान तरीका एक संपादक का उपयोग करना है जिसमें टैब और स्पेस-टैब समर्थन है। अपने सभी प्रमुख स्पेस-टैब को टैब में कनवर्ट करें, टैब आकार को चार पर सेट करें, और उसके बाद प्रमुख टैब को स्पेस-टैब में कनवर्ट करें।

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

+0

हमने Emacs में भी वही किया। इस तरह प्रोग्रामर उन ग्रंथों को देख सकते थे जिन्हें वे समूह के बाकी हिस्सों पर मजबूर किए बिना पसंद करते थे। –

7

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

26

मुझे लगता है कि असली सवाल यह है कि रिक्त स्थान और टैब क्यों नहीं।

टैब्स स्पष्ट रूप से बेहतर कर रहे हैं:

  • यह असंगत खरोज (मैं कोड सामान्य रूप से 4 स्थानों इंडेंट है कि देखा है के लिए लगभग असंभव बना देता है, लेकिन फिर कुछ भागों एक अंतरिक्ष बंद होने के लिए होता है, यह है यदि 7 या 8 रिक्त स्थान हैं तो सरल निरीक्षण द्वारा बताना मुश्किल है ... यह टैब के साथ नहीं होगा, जब तक कि आप अपना टैबस्टॉप 1 स्थान पर सेट न करें)।
  • टैब एक तार्किक अर्थ खरोज के लिए प्रतिनिधित्व है, यह आप (और किसी भी अन्य डेवलपर) प्रदर्शित करने के लिए के रूप में कई "रिक्त स्थान" का चयन करने के (या बल्कि कॉलम) की अनुमति देता है कि आप अन्य लोगों की वरीयताओं के साथ खिलवाड़ के बिना चाहते हैं।
  • यह कम कीस्ट्रोक है यदि आपके पास केवल "नोटपैड" (या अन्य डमी संपादक) है।
  • टैब जोड़ना और निकालना सममित ऑपरेशन है। टैब आईडी को मारते समय अधिकांश आईडीई स्वचालित रूप से 4 रिक्त स्थान डाल सकते हैं, लेकिन आमतौर पर वे बैकस्पेस को मारते समय केवल 1 स्थान निकालते हैं (अन-इंडेंट ऑपरेशन अभी भी शिफ्ट-टैब के रूप में सुलभ है, लेकिन यह दो महत्वपूर्ण संयोजन है) या आप माउस का उपयोग करने के लिए क्लिक करते हैं इंडेंटेशन के बीच में और एक चरित्र को हटा दें। तो
  • आप एक समझौते पर व्यवस्थित करने के लिए, क्योंकि यदि आप रिक्त स्थान के लिए जाने का निर्णय एक कम बात है,:
  • वे बजाय केवल 1 बाइट 4 लेने (पी लाइनों के हजारों से गुणा और आप कुछ KB बचाने!) चर्चा फिर से शुरू करने के लिए शुरू होती है कि कितने (हालांकि आम सहमति चार के आसपास होती है)।

रिक्त स्थान के लाभ:

  • गुइडो उन्हें पसंद करती है।
  • आप आसानी से यहां एक टैब टाइप नहीं कर सकते हैं, यह फोकस स्थानांतरित करता है (हालांकि आप एक पेस्ट कर सकते हैं)।
+2

मुझे लगता है कि जिस तरह से आपने कहा है कि यह फोकस स्थानांतरित करता है। –

0

4 रिक्त स्थान या 2 रिक्त स्थान का उपयोग कर पूरी तरह से आपके ऊपर है। 4 रिक्त स्थान सिर्फ एक सम्मेलन है। सबसे महत्वपूर्ण क्या है, टैब और रिक्त स्थान मिश्रण न करें। स्पेस बार का उपयोग करें

6

कोई सभ्य संपादक (emacs, vim) आपके लिए इस संपूर्ण बकवास को अमूर्त करेगा। यह रिक्त स्थान या टैब के साथ समान रूप से अच्छी तरह से काम करेगा, और इसे किसी भी रिक्त स्थान (या टैब वर्ण के लिए किसी भी स्थान-चौड़ाई) का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है। यह बिना किसी परेशानी के विभिन्न प्रारूपों के बीच भी परिवर्तित हो सकता है (:retab vim में कमांड देखें)।

यदि आप थोक में स्रोत स्वरूपण को परिवर्तित करने का प्रयास कर रहे हैं, तो मैं आपको indent उपयोगिता पर एक नज़र डालने की सलाह देता हूं।

उसने कहा, मैं दूसरे प्रश्न का उत्तर देने का विरोध नहीं कर सकता ... मेरी प्राथमिकता हमेशा टैब के लिए रही है, क्योंकि यह पूरे मुद्दे को छोड़ देती है और हर कोई चौड़ाई सेट के साथ स्रोत कोड को देख सकता है जैसा कि वे फिट देखते हैं। जब आप संपादकों में काम कर रहे हों तो यह बहुत कम टाइपिंग भी है जो इसे परिवर्तित करने में सहायक नहीं है। जहां तक ​​2 बनाम 4 रिक्त स्थान हैं, यह पूरी तरह से कॉस्मेटिक है।

2

एक कारण यह है कि यदि आप इंडेंटेशन के लिए कम रिक्त स्थान का उपयोग करते हैं, तो आप अधिक विवरणों को घोंसला करने में सक्षम होंगे (क्योंकि रेखा की लंबाई आमतौर पर 80 तक सीमित है)।

अब मुझे पूरा यकीन है कि कुछ लोग अभी भी असहमत हैं कि कितने नेस्टेड संरचना अधिकतम होनी चाहिए।

55

मुझे यह तथ्य पसंद है कि चार स्पेस वर्ण अच्छी तरह से फ़ंक्शन के आंतरिक कोड को इंडेंट करते हैं, क्योंकि def + one space चार वर्ण बनाता है।

def·foo(): 
····pass 
5

इसके अलावा कारणों में से एक है:

: क्या आप कुछ लंबी लाइन (अब 80 से प्रतीकों) और 2 में इसे विभाजित करना चाहते हैं जब आप इंडेंट करने के लिए केवल 1 स्थान होगा, कि थोड़ा भ्रामक है
if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \ 
and someotherstatementhere: 
    # some code inside if block 
    pass 

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \ 
    and someotherstatementhere: 
    # some code inside if block 
    pass 
+2

आपको ऐसा नहीं करना चाहिए। यदि आपका इंडेंटेशन 4 रिक्त स्थान है तो आपको उससे कम इंडेंटेशन नहीं होना चाहिए। मेरी राय में "और" रेखा को "अगर" रेखा से दो और स्तरों को इंडेंट किया जाना चाहिए। – TimK

1

यदि आप अन्य प्रोग्रामर के साथ पाइथन कोड लिखना चाहते हैं तो यह एक समस्या बन जाती है यदि आप उनके जैसे अलग इंडेंट का उपयोग करते हैं। अधिकांश पायथन प्रोग्रामर 4-स्पेस इंडेंट का उपयोग करते हैं।

1

4 रिक्त स्थान के साथ लंबे नेस्टेड कोड ब्लॉक को नजरअंदाज करना आसान है। डिबगिंग करते समय समय बचाता है।

+0

सहमत हुए। सी जैसी भाषा के लिए मैं वास्तव में दो का उपयोग करता हूं, लेकिन सी में इंडेंटेशन द्वारा प्रदान किया गया दृश्य सुराग पाइथन में उससे कम महत्वपूर्ण है। – user1071847

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