it-swarm.com.de

Warum hat Python keine mehrzeiligen Kommentare?

OK, mir ist bewusst, dass Strings mit 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, oder?

Ich habe gegoogelt und den Python Style Guide gelesen, aber ich konnte keine technische Antwort finden, warum es keine formale Implementierung von mehrzeiligen/* */Kommentaren gibt. Ich habe keine Problem mit dreifachen Anführungszeichen, aber ich bin ein wenig neugierig, was zu dieser Entwurfsentscheidung geführt hat.

236
CoolGravatar

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

Guido hat hat getwittert darüber:

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

254
Ned Batchelder

Mehrzeilige Kommentare sind leicht zu unterbrechen. Was ist, wenn Sie folgendes in einem einfachen Taschenrechnerprogramm 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.

60
Steve Losh

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

Laut Guido ist mehrzeilige Kommentare in Python sind 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
34
Triptych

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

30

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

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

Siehe PEP 0008 , Abschnitt Kommentare

Und sehen Sie nach, ob Ihr Python Tastaturkürzel zum Kommentieren von Blöcken enthält. Emacs unterstützt dies, ebenso wie Eclipse, vermutlich die meisten anständigen IDEs.

12
Abgan

Von Das Zen von Python :

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

9
Jeremy Cantrell

So kommentieren Sie einen Codeblock in der Pycharm IDE aus:

  • Code | Kommentar mit Zeilenkommentar
  • Windows oder Linux: Ctrl + /
  • Mac OS: Command + /
5

Persönlich ist mein Kommentarstil in say Java wie

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

Nur einzeilige Kommentare zu haben, ist also keine schlechte Sache, wenn Ihr Stil typisch für das vorhergehende Beispiel ist, weil Sie es 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, dass Kommentare am Ende weniger wie Kommentare und mehr wie eine Art Zitat aussehen

'
' This is a VB.NET example
'

Einzeilige Kommentare haben weniger Zeichenverbrauch als mehrzeilige Kommentare und werden möglicherweise von einigen zweifelhaften Zeichen in einer Regex-Anweisung weniger häufig ignoriert? Ich würde Ned allerdings eher zustimmen.

5
Kezzer
# This
# is
# a 
# multi-line
# comment

Verwenden Sie dazu den Kommentarblock oder das Suchen und Ersetzen (s/^/#/g) in Ihrem Editor.

4
recursive

Ich habe dieses Problem gelöst, indem ich ein Makro für meinen Texteditor (TextPad) heruntergeladen habe, mit dem ich Zeilen hervorheben und dann am Anfang jeder Zeile ein # einfügen kann. 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 zu "deaktivieren".

3
kati

Mehrzeilige Kommentare mit IDLE on:

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

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

0
Jorgesys

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

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

0
stalepretzel

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.

0
hasen

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

0
Charlie Martin

Für alle anderen, die mehrzeilige Kommentare in Python - verwenden möchten, kann die Verwendung des dreifachen Anführungszeichens problematische Folgen haben, da ich gerade auf die harte Tour gelernt habe.

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 das 'species' Schlüssel. Besser nur # für Kommentare.

0
Itamar Mushkin

Außerdem mehrzeilige Kommentare sind eine Hündin . Tut mir leid, aber unabhängig von der Sprache verwende ich sie nur für Debugging-Zwecke. Angenommen, Sie haben Code wie diesen:

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

Dann stellen Sie fest, dass sich in Ihrem Code etwas befindet, das Sie mit dem Debugger nicht beheben können, und beginnen 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.

0
martiert