पायथन में बहुस्तरीय टिप्पणियां क्यों नहीं हैं?


252

ठीक है, मुझे पता है कि ट्रिपल-उद्धरण तार मल्टीलाइन टिप्पणियों के रूप में काम कर सकते हैं। उदाहरण के लिए,

"""Hello, I am a 
   multiline comment"""

तथा

'''Hello, I am a 
   multiline comment'''

लेकिन तकनीकी रूप से ये बात सही है, सही है?

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


8
यदि आप इसे एक स्ट्रिंग के रूप में कर सकते हैं तो अधिक तरीके क्यों जोड़ें?
ब्रोड

12
बस जोड़ना चाहता था, कि अगर आप टिप्पणी करने की कोशिश कर रहे हैं तो यह भी विफल हो जाता है कि इसमें टिप्पणी / बहु-पंक्ति स्ट्रिंग भी हैं। और निश्चित रूप से, यही कारण है कि हमें उनकी आवश्यकता है।
nycynik

50
@ एस। मुझे लगता है कि यह एक उपयोगी सवाल है। यह समझने के लिए कि पायथन अच्छा क्यों है, यह डिजाइन के निर्णयों को समझने के लिए महत्वपूर्ण है जो किए गए थे (और अभी भी चल रहे निर्णय जो किए गए हैं)। सवाल तर्कपूर्ण या जुझारू नहीं है; यह उत्सुक है। जिज्ञासा को लेकर इतना कठोर होने की जरूरत नहीं है।
मार्क ई। हसे

6
यदि आपको if False:कोड के लिए एक मल्टी लाइन टिप्पणी की आवश्यकता है तो कोड
AturSams

5
@ ब्रॉडी क्योंकि स्ट्रिंग्स को संसाधित किया जाता है। टिप्पणियों को नजरअंदाज किया जाता है। टिप्पणियों के रूप में स्ट्रिंग का उपयोग करने में समस्याएं हैं। जरा चारों ओर देखिए :)
ADTC

जवाबों:


266

मुझे संदेह है कि आपको इससे बेहतर उत्तर मिलेगा, "गुइडो ने मल्टी-लाइन टिप्पणियों की आवश्यकता महसूस नहीं की"।

गुइडो ने इस बारे में ट्वीट किया है:

पायथन टिप: आप मल्टी-लाइन स्ट्रिंग्स का उपयोग मल्टी-लाइन टिप्पणियों के रूप में कर सकते हैं। जब तक डॉकस्ट्रिंग्स के रूप में उपयोग नहीं किया जाता है, तब तक वे कोई कोड उत्पन्न नहीं करते हैं! :-)


28
इस पर गुइडो का ट्वीट देखें ।
13-21

15
मिक्स मल्टी-लाइन स्ट्रिंग और ब्लॉक टिप्पणियों का एक नुकसान आईडीई को पता नहीं है कि आप क्या चाहते हैं इस प्रकार अलग-अलग शैली में टिप्पणी नहीं दिखा सकते हैं।
बैयान हुआंग

21
मल्टी-लाइन स्ट्रिंग्स के साथ कोड को टिप्पणी करना भी असंभव बनाता है (और यदि आप सावधान नहीं हैं तो इंडेंटेशन त्रुटियों का कारण बन सकते हैं)। Ew!
माइक ग्राहम

3
मैंने बहुत सारे क्षेत्रों में काम किया है जहाँ अगर आपके कोड में कोड टिप्पणी की गई है तो आपका कोड अस्वीकार कर दिया जाता है और आप अपना सीवी अपडेट करने के लिए खुद को आमंत्रित भी कर सकते हैं। या तो उस कोड को हटा दें जिसकी आवश्यकता नहीं है, समस्या नहीं है यदि कोड संस्करण नियंत्रण में है, या if False:उस कोड से पहले उपयोग करें जिसे अक्षम करने की आवश्यकता है।
स्टीव बार्न्स

4
@SteveBarnes सहमत हैं कि उत्पादन में टिप्पणी-आउट कोड के बड़े ब्लॉक खराब हैं। लेकिन मुझे समझ नहीं आता कि if Falseबेहतर क्यों है। यह बिल्कुल स्पष्ट है, जबकि कम स्पष्ट है (क्योंकि यह एक नज़र में स्पष्ट नहीं है कि कोड के ब्लॉक को अक्षम कर दिया गया है)।

59

मल्टी-लाइन टिप्पणियां आसानी से टूटने योग्य हैं। यदि आप एक साधारण कैलकुलेटर प्रोग्राम में निम्नलिखित हैं, तो क्या होगा?

operation = ''
print("Pick an operation:  +-*/")
# Get user input here

एक बहु-पंक्ति टिप्पणी के साथ टिप्पणी करने का प्रयास करें:

/*
operation = ''
print("Pick an operation:  +-*/")
# Get user input here
*/

ओह, आपकी स्ट्रिंग में अंतिम टिप्पणी सीमांकक है।


174
इस उत्तर के बारे में सबसे अच्छी बात यह है कि यह एसओ के वाक्यविन्यास हाइलाइटर द्वारा कैसे नियंत्रित किया जाता है।
नीत्शे-जौ

73
यह कई कारणों में से एक है कि हमारे पास चरित्र क्यों हैं, मैं यह नहीं देखता कि मल्टी-लाइन टिप्पणियों के लिए समर्थन का एक अच्छा कारण नहीं है।
नेटली एडम्स

34
मैं आपका तर्क नहीं समझता - शायद मेरी टिप्पणी पर्याप्त नहीं थी। यदि हमने एक एस्केप चरित्र के रूप में \ n का उपयोग किया है: प्रिंट करें ("एक ऑपरेशन चुनें: + - * \ /") "* /" अब समाप्त टिप्पणी ब्लॉक को शाब्दिक रूप से प्रिंट नहीं किया जाएगा। आगे बढ़ो और C ++ में यह परीक्षण करें। वास्तव में SO का सिंटैक्स हाइलाइटर दिखाएगा कि यह वैध है। यह एक जटिल विषय नहीं है, यह अन्य भाषाओं में वर्षों से मौजूद है। मैं पूछूंगा कि आप अपने पोस्ट को अपडेट करके एस्केप कैरेक्टर्स का उपयोग यह दिखाने के लिए कर सकते हैं कि आप अपने कोड में "* /" का उपयोग कर सकते हैं।
नताली एडम्स 20

23
क्या होगा यदि आपके कोड में '' '' हो। उफ़ आपके कोड में अंतिम टिप्पणी परिसीमन है
siamii

21
बहु-पंक्ति टिप्पणियां स्वाभाविक रूप से टूटने योग्य नहीं हैं; यह सिर्फ इतना है कि उनमें से अधिकांश कार्यान्वयन (पायथन सहित) हैं। मेरे दिमाग में, पायथन में मल्टी-लाइन टिप्पणियां करने का स्पष्ट तरीका है, बस मुझे टिप्पणी ब्लॉक शुरू करने #:और टिप्पणी के समाप्त होने पर दिखाने के लिए इंडेंटेशन का उपयोग करने देना है। यह साफ, सुसंगत है, और पूरी तरह से नेस्टिंग संभालती है।
गेट्सडा

34

ट्रिपल-उद्धृत पाठ को बहु-पंक्ति टिप्पणी नहीं माना जाना चाहिए; अधिवेशन द्वारा, वे डॉकस्ट्रिंग्स हैं । उन्हें वर्णन करना चाहिए कि आपका कोड क्या करता है और इसका उपयोग कैसे करना है, लेकिन कोड के ब्लॉक को टिप्पणी करने जैसी चीजों के लिए नहीं।

गुइडो के अनुसार, पायथन में बहुस्तरीय टिप्पणियां केवल सन्निहित एकल-पंक्ति टिप्पणियां ("ब्लॉक टिप्पणियों" के लिए खोज) हैं।

कोड के ब्लॉक पर टिप्पणी करने के लिए, मैं कभी-कभी निम्नलिखित पैटर्न का उपयोग करता हूं:

if False:
    # A bunch of code

6
गुइडो की तरह लगता है उसके बाद से उसके दिमाग
पेट्र विक्टोरिन

5
"अगर गलत:" समाधान के बारे में, बात यह है कि अजगर में यह टैब के साथ काम करता है, तो आपको "यदि गलत:" के तहत सभी कोड में टैब करना होगा। और बाद में चंक को अनटैब करें। इसलिए आपको अपने टेक्स्ट एडिटर के साथ सुंदर होना चाहिए।
बार्लॉप

3
यदि आप एक सभ्य संपादक का उपयोग करते हैं, तो यह उतना ही समय होना चाहिए जितना कि * /
AturSams

@barlop yup - अपने संपादकों को जानें! यह आमतौर पर एक दूसरे के नीचे के साथ प्राप्त करने योग्य हैV}>>
Triptych

30

यह संभावना मूल अवधारणा पर वापस जाती है कि किसी कार्य को करने का एक स्पष्ट तरीका होना चाहिए। अतिरिक्त टिप्पणी शैली अनावश्यक जटिलताओं को जोड़ती है और पठनीयता को कम कर सकती है।


8
यह मुद्दा है, मेरा मानना ​​है कि: एक टिप्पणी के रूप में एक स्ट्रिंग का उपयोग करना स्पष्ट नहीं है और "एक कार्य करने का एक तरीका" सिद्धांत का उल्लंघन करता है, क्योंकि टिप्पणी करने के दो तरीके हैं: तार और #
गेट्सडा

1
लेकिन इसकी सी-आधारित भाषाओं में आपकी तुलना में काफी भिन्नता नहीं है: / * बनाम //, इसलिए मैं यह नहीं देखता कि इसकी स्थिति कितनी बदतर है।
बेन रॉबर्ट्स

//, इस पर विचार करें कि कोई व्यक्ति बहु-पंक्ति टिप्पणी क्यों चाहेगा। अच्छे कारण: ... मैं वास्तव में किसी भी परे सोच नहीं सकता "मुझे इन # doohickeys में से कई को टाइप करने की ज़रूरत नहीं है" और "मुझे इस विशेष टिप्पणी को बहुत सटीक तरीके से प्रदर्शित करने की आवश्यकता है, और यह सटीक तरीका नहीं है '' पूर्ववर्ती के लिए अनुमति नहीं है। कहते हैं कि कोई व्यक्ति ASCII आरेख करना चाहता है, या एक विशिष्ट समस्या उत्पन्न होने पर कुछ संदर्भ जावास्क्रिप्ट कोड को कॉपी और पेस्ट किया जाना चाहिए। एक कार्य करने का एक स्पष्ट तरीका, यहाँ, उस कार्य के किनारे मामलों को कवर नहीं करता है। हालांकि, मैं मानता हूं कि अतिरिक्त टिप्पणी शैली बीएडी हैं।
नाथन बसानी

3
"मुझे इनमें से कई # doohickeys टाइप करने की ज़रूरत नहीं है"। ठीक यही कारण है कि सभी भाषाओं में बहुत सारी टिप्पणियाँ ब्लॉक हैं (/ * .. * /)। मानो या न मानो, लेकिन मुझे यह दस्तावेज़ पसंद है कि मेरा कोड क्या करता है: इनपुट, आउटपुट, एल्गोरिदम का इस्तेमाल किया, पैरामीटर ... यह बहुत अधिक पाठ है जो संशोधित भी हो जाता है। केवल एकल-पंक्ति टिप्पणियों पर प्रतिबंध केवल सादा हास्यास्पद है। ध्यान दें कि मैं कोड टिप्पणी करने के लिए दृष्टिकोण की वकालत नहीं करता हूं - हालांकि वैकल्पिक दृष्टिकोणों की कोशिश करते समय यह अक्सर आसान होता है, जब तक कि ज्ञात संभावित दुष्प्रभावों को समझा जाता है।
अल्बर्ट गॉडफ्राइंड

3
अजगर के बारे में मुझे जो दूसरी बात खटकती है, वह यह है कि यह मूल रूप से वन-मैन डिजाइन की गई भाषा है। गुइडो जो भी कहते हैं वह सच है ... इसलिए हमारे पास भाषा संस्करणों के बीच उन सभी विषम असमानताएं हैं। क्यों ? क्योंकि गुइडो ने ऐसा कहा ...
अल्बर्ट गॉडफ्रेंड

12

खैर, ट्रिपल-कोट्स का इस्तेमाल डॉकस्ट्रिंग्स में बहुस्तरीय टिप्पणियों के रूप में किया जाता है। और # टिप्पणियों का उपयोग इनलाइन टिप्पणियों के रूप में किया जाता है और लोगों को इसकी आदत होती है।

अधिकांश स्क्रिप्ट भाषाओं में बहुभाषी टिप्पणियां नहीं होती हैं। शायद यही कारण है?

PEP 0008 , अनुभाग टिप्पणियाँ देखें

और देखें कि क्या आपका पायथन संपादक ब्लॉक टिप्पणी के लिए कुछ कीबोर्ड शॉर्टकट प्रदान करता है। Emacs इसका समर्थन करता है, साथ ही साथ ग्रहण, संभवतः अधिकांश सभ्य IDEs करता है।



5

व्यक्तिगत रूप से मेरी टिप्पणी शैली में जावा की तरह है

/*
 * My multi-line comment in Java
 */

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

#
# My multi-line comment in Python
#

VB.NET भी एकल-पंक्ति वाली एक भाषा है जिसमें केवल टिप्पणी की जाती है, और व्यक्तिगत रूप से मुझे यह कष्टप्रद लगता है क्योंकि टिप्पणियों के अंत में कम पसंद वाली टिप्पणियाँ और कुछ और तरह के उद्धरण पसंद आते हैं।

'
' This is a VB.NET example
'

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


5

Pycharm IDE में कोड के एक ब्लॉक पर टिप्पणी करने के लिए :

  • कोड | लाइन टिप्पणी के साथ टिप्पणी करें
  • विंडोज या लिनक्स: Ctrl+/
  • मैक ओएस: Command+/

4
# This
# is
# a 
# multi-line
# comment

इसे प्राप्त करने के लिए अपने संपादक में टिप्पणी ब्लॉक या खोज और बदलें (एस / ^ / # / जी) का उपयोग करें।


3

मैंने अपने टेक्स्ट एडिटर (टेक्स्टपैड) के लिए एक मैक्रो डाउनलोड करके इसे हल किया है जो मुझे लाइनों को हाइलाइट करने की अनुमति देता है और यह प्रत्येक पंक्ति के पहले # पर सम्मिलित करता है। एक समान मैक्रो # # को हटाता है। कुछ पूछ सकते हैं कि मल्टीलाइन क्यों आवश्यक है लेकिन यह तब काम आता है जब आप डिबगिंग उद्देश्यों के लिए कोड के एक ब्लॉक को "बंद" करने का प्रयास कर रहे हों।


1

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

this_dict = {
    'name': 'Bob',

"""
This is a multiline comment in the middle of a dictionary
"""

    'species': 'Cat'
}

मल्टी-लाइन टिप्पणी 'species'कुंजी को गड़बड़ करते हुए, अगले स्ट्रिंग में टक जाएगी । केवल #टिप्पणियों के लिए उपयोग करने के लिए बेहतर है ।


0

क्योंकि # सम्मेलन एक आम बात है, और वास्तव में कुछ भी नहीं है जो आप एक बहु-टिप्पणी के साथ कर सकते हैं जो आप # -sign टिप्पणी के साथ नहीं कर सकते। यह /* ... */पीएल / I पर वापस जाने वाली टिप्पणियों की वंशावली की तरह एक ऐतिहासिक दुर्घटना है ,


0

मान लें कि उन्हें सिर्फ अनावश्यक माना गया था। चूंकि यह सिर्फ टाइप करना इतना आसान है #a comment, इसलिए मल्टीलाइन टिप्पणियाँ केवल कई सिंगल लाइन टिप्पणियों से मिलकर बन सकती हैं।

दूसरी ओर, HTML के लिए , मल्टीलाइनर की अधिक आवश्यकता है। टाइप करना मुश्किल है <!--comments like this-->


4
यह बात नहीं है - सिंगल लाइन और मल्टी लाइन दोनों टिप्पणियों के लिए स्पष्ट उपयोग के मामले हैं। मैंने उन दोनों को अन्य भाषाओं में बड़े पैमाने पर उपयोग किया है (हालांकि मुझे पता है कि अजगर शुद्धतावादी अन्य भाषाओं की परवाह नहीं करते हैं)। ;)
जौंडोडो

1
कोड की 200 लाइनों के साथ ऐसा करने का प्रयास करें, जिसे आपको बाहर निकालना है, वापस रखना है, फिर फिर से निकालना है। 200 प्रारंभिक # टाइप करने से पुराना असली उपवास हो जाता है।
ड्रैगनलॉर्ड

0

यह सिर्फ एक अनुमान है .. लेकिन

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


0

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

void someFunction()
{
    Something
    /*Some comments*/
    Something else
}

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

void someFunction()
{ /*
    Something
   /* Comments */
   Something more*/
}

यह वास्तव में परेशान करने वाला है।


3
उह महान, लेकिन पायथन में /*-स्टाइल टिप्पणी नहीं है ।
त्रिपिटक

17
ठीक है, चूंकि अजगर के पास असली बहुस्तरीय टिप्पणियां नहीं हैं, यह अजगर में कठिन उदाहरण देने की तरह था।
शहीद

2
मैं व्यक्तिगत रूप से समस्या को नहीं समझता। बस अतिरिक्त * / हटाएं। या अगर आप सटीक होने की आवश्यकता है तो एकल लाइनों पर टिप्पणी के लिए // का उपयोग करें।
नताली एडम्स

4
कई भाषाएँ हैं (उनमें से जो भी कारण के लिए कार्यात्मक हैं) जो नेस्टेड टिप्पणियों की अनुमति देती हैं। उदाहरण के लिए rosettacode.org/wiki/Comments में "नेस्टेड" खोजें ।
कीथ

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

0

IDLE पर बहुस्तरीय टिप्पणियों का उपयोग करें:

  • मैक ओएस एक्स , कोड चयन के बाद, Ctrl+ के साथ कोड के ब्लॉक पर टिप्पणी करें 3और Ctrl+ का उपयोग करके असहजता 4

  • विंडोज , कोड चयन के बाद, साथ कोड का एक खंड टिप्पणी Ctrl+ Alt+ 3का उपयोग कर और टिप्पणी हटाएं Ctrl+ At+ 4


-1

मुझे एक आदमी के बारे में पढ़ना याद है, जो अपनी बहु-पंक्ति टिप्पणियों को ट्रिपल-उद्धृत चर में रखेगा:

x = '''
This is my
super-long mega-comment.
Wow there are a lot of lines
going on here!
'''

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

कोड को केवल इसके साथ लपेटकर टिप्पणी करना भी आसान है

x = '''

तथा

'''

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