Warum hat Python keine mehrzeiligen Kommentare?

252

OK, mir ist bewusst, dass Zeichenfolgen in dreifachen Anführungszeichen als mehrzeilige Kommentare dienen können. Beispielsweise,

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

und

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

Aber technisch gesehen sind das Saiten, richtig?

Ich habe den Python-Styleguide gegoogelt und gelesen, konnte jedoch keine technische Antwort darauf finden, warum es keine formale Implementierung von mehrzeiligen Kommentaren vom Typ / * * / gibt. Ich habe kein Problem damit, dreifache Anführungszeichen zu verwenden, aber ich bin ein wenig neugierig, was zu dieser Designentscheidung geführt hat.

CoolGravatar
quelle
8
Wenn Sie es als Zeichenfolge tun können, warum sollten Sie weitere Möglichkeiten hinzufügen?
Brody
12
Ich wollte nur hinzufügen, dass es fehlschlägt, wenn das, was Sie kommentieren möchten, auch Kommentare / mehrzeilige Zeichenfolgen enthält. Und deshalb brauchen wir sie natürlich.
Nycynik
50
@ S.Lott Ich denke, es ist eine nützliche Frage. Um zu verstehen, warum Python gut ist, ist es wichtig, die getroffenen Entwurfsentscheidungen (und die laufenden Entscheidungen, die noch getroffen werden) zu verstehen. Die Frage ist nicht argumentativ oder kämpferisch; es ist neugierig. Sie müssen nicht so neugierig sein.
Mark E. Haase
6
Wenn Sie einen mehrzeiligen Kommentar für Kabeljau benötigen, geben Sie nur if False:den Code ein
AturSams
5
@Brody Weil Strings verarbeitet werden. Kommentare werden ignoriert. Es gibt Probleme bei der Verwendung von Zeichenfolgen als Kommentare. Schauen Sie sich um :)
ADTC

Antworten:

266

Ich bezweifle, dass Sie eine bessere Antwort erhalten als "Guido hatte nicht das Bedürfnis nach mehrzeiligen Kommentaren".

Guido hat darüber getwittert :

Python-Tipp: Sie können mehrzeilige Zeichenfolgen als mehrzeilige Kommentare verwenden. Sofern sie nicht als Dokumentzeichenfolgen verwendet werden, generieren sie keinen Code! :-)

Ned Batchelder
quelle
28
Siehe Guidos Tweet dazu.
Petr Viktorin
15
Ein Nachteil beim Mischen von mehrzeiligen Zeichenfolgen- und Blockkommentaren ist, dass IDE keine Ahnung hat, was Sie möchten, und daher Kommentare nicht in unterschiedlichen Stilen anzeigen kann.
Baiyan Huang
21
Es macht es auch unmöglich, Code mit mehrzeiligen Zeichenfolgen auskommentieren (und kann zu Einrückungsfehlern führen, wenn Sie nicht vorsichtig sind). Ew!
Mike Graham
3
Ich habe in vielen Bereichen gearbeitet, in denen Ihr Code abgelehnt wird, wenn Ihr Code auskommentierten Code enthält, und Sie möglicherweise sogar aufgefordert werden, Ihren Lebenslauf zu aktualisieren. Entfernen Sie entweder den Code, der nicht benötigt wird, kein Problem, wenn der Code unter Versionskontrolle steht, oder verwenden Sie ihn if False:vor dem Code, der deaktiviert werden muss.
Steve Barnes
4
@SteveBarnes sind sich einig, dass große Blöcke auskommentiertem Code in der Produktion schlecht sind. Aber ich verstehe nicht, warum if Falsees besser ist. Es erreicht genau das Gleiche, ist aber weniger klar (da es auf einen Blick nicht so offensichtlich ist, dass der Codeblock deaktiviert wurde).
59

Mehrzeilige Kommentare sind leicht zu brechen. Was ist, wenn Sie in einem einfachen Taschenrechnerprogramm Folgendes haben?

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

Versuchen Sie dies mit einem mehrzeiligen Kommentar zu kommentieren:

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

Hoppla, Ihre Zeichenfolge enthält das Endkommentar-Trennzeichen.

Steve Losh
quelle
174
Das Schönste an dieser Antwort ist, wie sie vom Syntax-Textmarker von SO gehandhabt wird.
Nietzche-jou
73
Dies ist einer der vielen Gründe, warum wir Escape-Zeichen haben. Ich sehe dies nicht als guten Grund, mehrzeilige Kommentare NICHT zu unterstützen.
Natalie Adams
34
Ich verstehe Ihre Logik nicht - vielleicht war mein Kommentar nicht klar genug. Wenn wir \ als Escapezeichen verwenden: print ("Wählen Sie eine Operation: + - * \ /") "* /" bezeichnet einen endenden Kommentarblock nicht mehr als wörtlich / wird gedruckt. Testen Sie dies in C ++. Tatsächlich zeigt der Syntax-Textmarker von SO, dass dies gültig ist. Dies ist kein komplexes Thema, es existiert seit Jahren in anderen Sprachen. Ich würde Sie bitten, Ihren Beitrag zu aktualisieren, um die Verwendung von Escape-Zeichen aufzunehmen, um zu zeigen, dass Sie "* /" in Ihrem Code verwenden können.
Natalie Adams
23
Was ist, wenn Ihr Code '' 'enthält? oops Ihr Code enthält das
Endkommentar-
21
Mehrzeilige Kommentare sind nicht von Natur aus zerbrechlich. Es ist nur so, dass die meisten Implementierungen von ihnen sind (einschließlich Pythons). Die naheliegende Möglichkeit, mehrzeilige Kommentare in Python zu erstellen, besteht meiner Meinung nach darin, einen Kommentarblock mit zu beginnen #:und Einrückungen zu verwenden, um anzuzeigen, wann der Kommentar beendet ist. Es ist sauber, konsistent und handhabt das Verschachteln perfekt.
GatesDA
34

Dreifach zitierter Text sollte NICHT als mehrzeiliger Kommentar betrachtet werden. Konventionell sind sie Docstrings . Sie sollten beschreiben, was Ihr Code tut und wie er verwendet wird, aber nicht zum Auskommentieren von Codeblöcken.

Laut Guido sind mehrzeilige Kommentare in Python nur zusammenhängende einzeilige Kommentare (Suche nach "Blockkommentaren").

Um Codeblöcke zu kommentieren, verwende ich manchmal das folgende Muster:

if False:
    # A bunch of code
Triptychon
quelle
6
Scheint, als hätte Guido seitdem seine Gedanken geändert .
Petr Viktorin
5
In Bezug auf die "if false:" - Lösung ist die Sache, dass Sie in Python, da es mit Registerkarten funktioniert, den gesamten Code unter "if False:" eingeben müssen. Und danach das Stück lösen. Sie müssten also mit Ihrem Texteditor ziemlich geschickt sein.
Barlop
3
Wenn Sie einen anständigen Editor verwenden, sollte dies die gleiche Zeit sein wie * /
AturSams
@barlop yup - lerne deine Redakteure! Dies ist in der Regel in weniger als einer Sekunde in vim mitV}>>
Triptychon
30

Dies geht wahrscheinlich auf das Kernkonzept zurück, dass es einen offensichtlichen Weg geben sollte, eine Aufgabe zu erledigen. Zusätzliche Kommentarstile führen zu unnötigen Komplikationen und können die Lesbarkeit beeinträchtigen.

Jarred McCaffrey
quelle
8
Ich glaube, das ist das Problem: Die Verwendung einer Zeichenfolge als Kommentar ist nicht offensichtlich und verstößt gegen das Prinzip "Eine Möglichkeit, eine Aufgabe zu erledigen", da es zwei Möglichkeiten gibt, Kommentare zu erstellen: Zeichenfolgen und #.
GatesDA
1
Aber es ist nicht wesentlich anders als das, was Sie in C-basierten Sprachen haben: / * vs //, also sehe ich nicht, wie es wesentlich schlimmer ist.
Ben Roberts
// Überlegen Sie, WARUM jemand einen mehrzeiligen Kommentar haben möchte. Gute Gründe: ... Ich kann mir nichts anderes vorstellen als "Ich muss nicht so viele dieser # doohickeys eingeben" und "Ich muss diesen bestimmten Kommentar sehr genau anzeigen, und genau das tut es nicht." 'vorangestelltes # nicht zulassen. " Angenommen, jemand möchte ein ASCII-Diagramm erstellen oder einen Referenz-Javascript-Code einfügen, der kopiert und eingefügt werden soll, wenn ein bestimmtes Problem auftritt. Der eine offensichtliche Weg, eine Aufgabe zu erledigen, deckt hier nicht die Randfälle dieser Aufgabe ab. Ich stimme jedoch zu, dass zusätzliche Kommentarstile SCHLECHT sind.
Nathan Basanese
3
"Ich muss nicht so viele dieser # doohickeys eingeben". Genau deshalb haben so ziemlich alle Sprachen Blockkommentare (/ * .. * /). Ob Sie es glauben oder nicht, aber ich dokumentiere gerne, was mein Code tut: die Eingaben, die Ausgaben, die verwendeten Algorithmen, die Parameter ... Das ist viel Text, der auch geändert wird. Die Beschränkung auf nur einzeilige Kommentare ist einfach lächerlich. Beachten Sie, dass ich den Ansatz zum Auskommentieren von Code NICHT befürworte - obwohl dies oft praktisch ist, wenn Sie alternative Ansätze ausprobieren, solange die bekannten möglichen Nebenwirkungen verstanden werden.
Albert Godfrind
3
Das andere, was ich an Python ablehne, ist, dass es im Wesentlichen eine von einem Mann entworfene Sprache ist. Was auch immer Guido sagt, ist die Wahrheit ... Wir haben also all diese seltsamen Inkompatibilitäten zwischen Sprachversionen. Warum ? Weil Guido es gesagt hat ...
Albert Godfrind
12

Nun, die dreifachen Anführungszeichen werden als mehrzeilige Kommentare in Dokumentzeichenfolgen verwendet. Und # Kommentare werden als Inline-Kommentare verwendet und die Leute gewöhnen sich daran.

Die meisten Skriptsprachen haben auch keine mehrzeiligen Kommentare. Vielleicht ist das die Ursache?

Siehe PEP 0008 , Abschnitt Kommentare

Überprüfen Sie, ob Ihr Python-Editor eine Tastenkombination für Blockkommentare bietet. Emacs unterstützt es ebenso wie Eclipse, vermutlich die meisten anständigen IDEs.

Abgan
quelle
9

Aus dem Zen von Python :

Es sollte einen - und vorzugsweise nur einen - offensichtlichen Weg geben, dies zu tun.

Jeremy Cantrell
quelle
5

Persönlich ist mein Kommentarstil in Java wie

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

Nur einzeilige Kommentare zu haben ist also keine so schlechte Sache, wenn Ihr Stil typisch für das vorhergehende Beispiel ist, weil Sie im Vergleich dazu hätten

#
# My multi-line comment in Python
#

VB.NET ist auch eine Sprache mit nur einzeiligen Kommentaren, und ich persönlich finde es ärgerlich, wenn Kommentare weniger nach Kommentaren als nach Zitaten aussehen

'
' This is a VB.NET example
'

Nur einzeilige Kommentare haben weniger Zeichen als mehrzeilige Kommentare und werden möglicherweise weniger wahrscheinlich von einigen zwielichtigen Zeichen in einer Regex-Anweisung maskiert? Ich würde Ned allerdings eher zustimmen.

Kezzer
quelle
5

So kommentieren Sie einen Codeblock in der Pycharm- IDE aus:

  • Code | Kommentar mit Zeilenkommentar
  • Windows oder Linux: Ctrl+/
  • Mac OS: Command+/
Craig S. Anderson
quelle
4
# This
# is
# a 
# multi-line
# comment

Verwenden Sie den Kommentarblock oder suchen und ersetzen Sie (s / ^ / # / g) in Ihrem Editor, um dies zu erreichen.

rekursiv
quelle
3

Ich habe dieses Problem gelöst, indem ich ein Makro für meinen Texteditor (TextPad) heruntergeladen habe, mit dem ich Zeilen hervorheben kann, und dann am ersten jeder Zeile # eingefügt wird. Ein ähnliches Makro entfernt die #. Einige fragen sich vielleicht, warum Multiline erforderlich ist, aber es ist praktisch, wenn Sie versuchen, einen Codeblock für Debugging-Zwecke "auszuschalten".

kati
quelle
1

Für alle anderen, die in Python nach mehrzeiligen Kommentaren suchen - die Verwendung des dreifachen Anführungszeichens kann einige problematische Konsequenzen haben, wie ich gerade auf die harte Tour gelernt habe. Bedenken Sie:

this_dict = {
    'name': 'Bob',

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

    'species': 'Cat'
}

Der mehrzeilige Kommentar wird in die nächste Zeichenfolge eingefügt, wodurch der 'species'Schlüssel durcheinander gebracht wird . Besser nur #für Kommentare verwenden.

Itamar Mushkin
quelle
0

Weil die # -Konvention weit verbreitet ist und Sie mit einem mehrzeiligen Kommentar wirklich nichts tun können, was Sie mit einem # -Zeichenkommentar nicht können. Es ist ein historischer Unfall, wie die Abstammung von /* ... */Kommentaren, die auf PL / I zurückgehen.

Charlie Martin
quelle
0

Angenommen, sie wurden nur als unnötig angesehen. Da ist es so einfach, einfach zu tippen#a comment , können mehrzeilige Kommentare nur aus vielen einzeiligen Kommentaren bestehen.

Für HTML hingegen besteht ein größerer Bedarf an Multilinern. Es ist schwieriger, weiter zu tippen <!--comments like this-->.

Stalepretzel
quelle
4
Dies ist nicht der Punkt - es gibt offensichtliche Anwendungsfälle sowohl für einzeilige als auch für mehrzeilige Kommentare. Ich habe sie beide ausgiebig in anderen Sprachen verwendet (obwohl ich weiß, dass Python-Puristen sich nicht für andere Sprachen interessieren). ;)
Johndodo
1
Versuchen Sie dies mit 200 Codezeilen, die Sie herausnehmen, wieder einfügen und dann wieder herausnehmen müssen. Die Eingabe von 200 Anfangsnummern wird sehr schnell alt.
DragonLord
0

Dies ist nur eine Vermutung .. aber

Da es sich um Zeichenfolgen handelt, haben sie einen gewissen semantischen Wert (der Compiler entfernt sie nicht). Daher ist es sinnvoll, sie als Dokumentzeichenfolgen zu verwenden. Sie werden tatsächlich Teil des AST , sodass das Extrahieren von Dokumentation einfacher wird.

hasen
quelle
0

Außerdem sind mehrzeilige Kommentare eine Hündin . Tut mir leid zu sagen, aber unabhängig von der Sprache verwende ich sie nur zum Debuggen. Angenommen, Sie haben folgenden Code:

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

Dann stellen Sie fest, dass Ihr Code etwas enthält, das Sie mit dem Debugger nicht beheben können. Sie beginnen also mit dem manuellen Debuggen, indem Sie immer kleinere Codestücke mit diesen mehrzeiligen Kommentaren auskommentieren. Dies würde dann die Funktion geben:

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

Das ist wirklich irritierend.

martiert
quelle
3
uh toll, aber Python hat keine /*Kommentare im Stil.
Triptychon
17
Richtig, da Python keine echten mehrzeiligen Kommentare hat, war es schwierig, Beispiele in Python zu nennen.
Martiert
2
Ich persönlich verstehe das Problem nicht. Löschen Sie einfach das zusätzliche * /. Oder verwenden Sie //, um einzelne Zeilen zu kommentieren, wenn Sie präzise sein müssen.
Natalie Adams
4
Es gibt mehrere Sprachen (von denen viele aus irgendeinem Grund funktionieren), die verschachtelte Kommentare zulassen. Suchen Sie nach "verschachtelt" in rosettacode.org/wiki/Comments für Beispiele.
Keith
1
Nun ja, es wäre irritierend, einen mehrzeiligen Kommentar in einen mehrzeiligen Kommentar einzufügen. Und während ich mich immer nur an einen Teil meines Programms erinnere, erinnere ich mich zumindest daran, welchen Teil meines Programms ich betrachte und welchen ich auskommentiert habe. Aber wenn Sie sich nicht einmal daran erinnern können, können Sie die Tatsache nutzen, dass einige IDEs einen Kommentar kursiv machen. Auf jeden Fall können Sie für eine so kleine Funktion auch einzeilige Kommentare verwenden. Aber wenn Sie einen großen Teil des Programms auskommentieren, brauchen Sie wirklich einen mehrzeiligen Kommentar. oder ein Texteditor mit dieser Funktion.
Barlop
0

Mehrzeilige Kommentare mit IDLE für:

  • Mac OS X kommentiert nach der Codeauswahl einen Codeblock mit Ctrl+ 3und kommentiert ihn mit Ctrl+ aus 4.

  • Windows kommentiert nach der Codeauswahl einen Codeblock mit Ctrl+ Alt+ 3und kommentiert mit Ctrl+ At+ aus 4.

Jorgesys
quelle
-1

Ich erinnere mich, dass ich über einen Mann gelesen habe, der seine mehrzeiligen Kommentare in eine dreifach zitierte Variable geschrieben hat:

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

Dies nimmt zwar etwas Speicherplatz in Anspruch, bietet Ihnen jedoch mehrzeilige Kommentarfunktion und die meisten Editoren heben die Syntax für Sie hervor :)

Es ist auch einfach, Code durch einfaches Umschließen zu kommentieren

x = '''

und

'''
Turvyc
quelle
18
Entfernen Sie das x =und es nimmt keinen Speicher in Anspruch.
Endolith