Gibt es eine Möglichkeit, mehrzeilige Kommentare in Python zu erstellen?


1156

Ich habe vor kurzem angefangen, Python zu studieren , konnte aber keine mehrzeiligen Kommentare implementieren. Die meisten Sprachen haben Blockkommentarsymbole wie

/*

*/

Ich habe dies in Python versucht, aber es wird ein Fehler ausgegeben, daher ist dies wahrscheinlich nicht der richtige Weg. Hat Python tatsächlich eine mehrzeilige Kommentarfunktion?


2
Ich nehme an, als interpretierte Sprache ist es sinnvoll, wie im Fall von sh oder bash oder zsh, #nur so Kommentare abzugeben. Ich vermute, dass es einfacher ist, Python-Skripte auf diese Weise zu interpretieren.
Victor Zamanian

1
Ich weiß, dass diese Antwort alt ist, aber ich bin darauf gestoßen, weil ich die gleiche Frage hatte. Die akzeptierte Antwort funktioniert, obwohl ich nicht genug über Python weiß, um die Feinheiten zu kennen, warum es möglicherweise nicht korrekt ist (laut ADTC).
Brandon Barney

5
@BrandonBarney Lassen Sie mich Ihnen das Problem erklären. Die akzeptierte Antwort, die '' 'verwendet, erstellt tatsächlich eine mehrzeilige Zeichenfolge, die nichts bewirkt. Technisch gesehen ist das kein Kommentar. Zum Beispiel können Sie k = '' 'Fake Comment, Real String' '' schreiben. Drucken Sie dann (k), um zu sehen, was ADTC bedeutet.
Pinyotae

3
Das macht jetzt so viel mehr Sinn. Ich bin an vba gewöhnt, wo das Erstellen einer nicht verwendeten Zeichenfolge zu einem Fehler führt. Ich wusste nicht, dass Python es einfach ignoriert. Es funktioniert immer noch zum Debuggen und Lernen, ist aber keine gute Praxis für die tatsächliche Entwicklung.
Brandon Barney

Wenn Sie im Python-Quellcode eine lange Zeile unterbrechen, wird sie vom Editor automatisch eingerückt, um anzuzeigen, dass die unterbrochene Zeile wirklich Teil der vorherigen Zeile ist. Ist es das, was ich tun sollte, wenn ich eine lange Reihe von Pseudocodes aufbreche?
Alpha_989

Antworten:


1802

Sie können Zeichenfolgen in dreifachen Anführungszeichen verwenden. Wenn sie keine Dokumentzeichenfolge sind (das erste in einer Klasse / Funktion / einem Modul), werden sie ignoriert.

'''
This is a multiline
comment.
'''

(Stellen Sie sicher, dass die Führung '''entsprechend eingerückt ist , um eine IndentationError.)

Guido van Rossum (Schöpfer von Python) hat dies als "Pro-Tipp" getwittert .

Der Python-Styleguide PEP8 bevorzugt jedoch die Verwendung aufeinanderfolgender einzeiliger Kommentare , und dies finden Sie auch in vielen Projekten. Texteditoren haben normalerweise eine Verknüpfung, um dies einfach zu tun.


17
Hm. Ich habe eine riesige mehrzeilige Zeichenfolge in ein Python-Skript test.pyeingefügt, um sie zu sehen. Wenn ich das tue import test, wird eine test.pycDatei generiert. Leider ist die pycDatei sehr groß und enthält die gesamte Zeichenfolge als einfachen Text. Verstehe ich etwas falsch oder ist dieser Tweet falsch?
Unutbu

23
@unutbu, wenn es das einzige war, was in der Datei war, war es eine Dokumentzeichenfolge. Stellen Sie einen Code davor und er verschwindet aus dem pyc. Ich habe die Antwort bearbeitet und „Modul“ in die Liste der Dinge mit Dokumentzeichenfolgen eingefügt.
Petr Viktorin

31
Ich mag keine mehrzeiligen Zeichenfolgen als Kommentare. Die Syntaxhervorhebung markiert sie als Zeichenfolgen und nicht als Kommentare. Ich verwende gerne einen anständigen Editor, der sich automatisch mit dem Auskommentieren von Regionen und dem Umschließen mehrzeiliger Kommentare befasst, während ich tippe. Natürlich ist es Geschmackssache.
Sven Marnach

61
Als Konvention finde ich es hilfreich, """für Docstrings und '''für Blockkommentare zu verwenden . Auf diese Weise können Sie '''Ihre üblichen Dokumentstrings ohne Konflikte umwickeln .
Roshambo

19
Während Sie können mehrzeiligen Strings als mehrzeiligen Kommentare verwenden, bin ich überrascht , dass keine dieser Antworten beziehen sich auf den Unterabschnitt PEP 8 , dass Multi-line Kommentare von aufeinanderfolgenden einzeilige Kommentare empfiehlt speziell konstruiert, mit leeren #Linien Absätzen zu unterscheiden .
Luft

82

Python verfügt über eine mehrzeilige Zeichenfolgen- / Kommentarsyntax in dem Sinne, dass mehrzeilige Zeichenfolgen , sofern sie nicht als Dokumentzeichenfolgen verwendet werden, keinen Bytecode generieren - genau wie #vorangestellte Kommentare. Tatsächlich verhält es sich genau wie ein Kommentar.

Wenn Sie andererseits sagen, dass dieses Verhalten in der offiziellen Dokumentation dokumentiert werden muss, um eine echte Kommentarsyntax zu sein, dann können Sie zu Recht sagen, dass es als Teil der Sprachspezifikation nicht garantiert ist.

In jedem Fall sollte Ihr Texteditor auch in der Lage sein, einen ausgewählten Bereich einfach auskommentieren zu können (indem Sie #vor jeder Zeile ein einzelnes platzieren). Wenn nicht, wechseln Sie zu einem Texteditor, der dies tut.

Das Programmieren in Python ohne bestimmte Textbearbeitungsfunktionen kann eine schmerzhafte Erfahrung sein. Das Finden des richtigen Editors (und das Wissen, wie man ihn verwendet) kann einen großen Unterschied in der Wahrnehmung der Python-Programmiererfahrung bewirken.

Der Texteditor sollte nicht nur ausgewählte Bereiche auskommentieren können, sondern auch Codeblöcke leicht nach links und rechts verschieben können, und er sollte den Cursor beim Drücken automatisch auf die aktuelle Einrückungsstufe setzen Enter. Das Falten von Code kann ebenfalls nützlich sein.


Zum Schutz vor dem Verfall von Links ist hier der Inhalt von Guido van Rossums Tweet :

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


3
Eine dreifach zitierte Zeichenfolge ('' ') erfüllt tatsächlich mehrzeilige Kommentare.
Varun Bhatia

Danke. Verwendet ('' ') und ("" "), um den Block zu kommentieren, aber es hat mir bei Django-Anwendungen nicht geholfen. Wählen Sie also IDLE und es gibt Optionen wie Region auskommentieren und Regionen auskommentieren (Verknüpfung: Alt + 3 und Alt + 4) im Menü Format . Jetzt ist es einfacher als je zuvor.
Saurav Kumar

Sie sollten auch die Verwendung einer IDE in Betracht ziehen. Ja, sie sind kräftig, aber wenn sie richtig verwendet werden, können sie die Codierungszeit wirklich verlängern. Ich persönlich habe PyDev verwendet und jetzt PTVS (mit Visual Studio). Ich würde PTVS auf jeden Fall empfehlen, da es sehr schön ist, mit den oben genannten Funktionen zu arbeiten, zusammen mit viel mehr - direkte Integration in virtuelle Umgebungen und gelinde gesagt wirklich gutes Debugging
Sbspider

2
@HappyLeapSecond Ich denke, Sie sollten es klarstellen und sagen: "Python hat keine echte mehrzeilige Kommentarsyntax, unterstützt jedoch mehrzeilige Zeichenfolgen, die als Kommentare verwendet werden können."
ADTC

3
Was ich möchte, ist eine einfache Möglichkeit, beim Testen ganze Codeblöcke auskommentieren zu können. Andere Sprachen machen das einfach. Python ist nur ein Schmerz.
Albert Godfrind

45

Aus der akzeptierten Antwort ...

Sie können Zeichenfolgen in dreifachen Anführungszeichen verwenden. Wenn sie keine Dokumentzeichenfolge sind (als erstes in einer Klasse / Funktion / einem Modul), werden sie ignoriert.

Das ist einfach nicht wahr. Im Gegensatz zu Kommentaren werden Zeichenfolgen in dreifachen Anführungszeichen weiterhin analysiert und müssen syntaktisch gültig sein, unabhängig davon, wo sie im Quellcode erscheinen.

Wenn Sie versuchen, diesen Code auszuführen ...

def parse_token(token):
    """
    This function parses a token.
    TODO: write a decent docstring :-)
    """

    if token == '\\and':
        do_something()

    elif token == '\\or':
        do_something_else()

    elif token == '\\xor':
        '''
        Note that we still need to provide support for the deprecated
        token \xor. Hopefully we can drop support in libfoo 2.0.
        '''
        do_a_different_thing()

    else:
        raise ValueError

Sie werden entweder ...

ValueError: invalid \x escape

... auf Python 2.x oder ...

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 79-80: truncated \xXX escape

... auf Python 3.x.

Die einzige Möglichkeit, mehrzeilige Kommentare zu erstellen, die vom Parser ignoriert werden, ist ...

elif token == '\\xor':
    # Note that we still need to provide support for the deprecated
    # token \xor. Hopefully we can drop support in libfoo 2.0.
    do_a_different_thing()

Dann können Sie r'raw string'- verwenden r'\xor' == '\\xor'.
GingerPlusPlus

1
Nun, jeder "wahre" mehrzeilige Kommentar muss auch analysiert und syntaktisch gültig sein. Kommentare im C-Stil dürfen kein a enthalten, */da dies beispielsweise den Block beendet.

1
@ dan1111 das ist offensichtlich, dass der Kommentar keine Endmarkierung enthalten kann, aber das ist die einzige Einschränkung.
el.pescado

14
'''"Kommentare" haben mehr Einschränkungen. Sie können nur ganze Aussagen auskommentieren, während Kommentare Teile des Ausdrucks auskommentieren können. Beispiel: In C können Sie einige Listenelemente auskommentieren : int a[] = {1, 2, /* 3, 4, */ 5};. Mit einer mehrzeiligen Zeichenfolge können Sie dies nicht tun, da dies eine Zeichenfolge in Ihre Liste aufnehmen würde.
el.pescado

35

In Python 2.7 lautet der mehrzeilige Kommentar:

"""
This is a
multilline comment
"""

Wenn Sie sich in einer Klasse befinden, sollten Sie sie ordnungsgemäß tabulieren.

Zum Beispiel:

class weather2():
   """
   def getStatus_code(self, url):
       world.url = url
       result = requests.get(url)
       return result.status_code
   """

20
Dreifache Anführungszeichen sind eine Möglichkeit, Text einzufügen, der nichts bewirkt (ich glaube, Sie können dies auch mit normalen Zeichenfolgen in einfachen Anführungszeichen tun), aber sie sind keine Kommentare - der Interpreter führt die Zeile tatsächlich aus (die Zeile jedoch nicht tu nichts). Aus diesem Grund ist das Einrücken eines dreifach zitierten "Kommentars" wichtig.
Demis

12
Diese Lösung ist falsch, der weather2Kommentar ist eigentlich eine Dokumentzeichenfolge, da es das erste in der Klasse ist.
Ken Williams

Stimmen Sie @KenWilliams zu. Dies ist keine korrekte Lösung. Versuchen Sie, dies in die Mitte einer Funktion / Klasse zu stellen, und sehen Sie, wie es Ihre Formatierung durcheinander bringt und das Falten / Fusseln von Code automatisiert.
Alpha_989

25

AFAIK, Python hat keine Blockkommentare. Zum Kommentieren einzelner Zeilen können Sie das #Zeichen verwenden.

Wenn Sie Notepad ++ verwenden , gibt es eine Verknüpfung zum Blockkommentieren . Ich bin sicher, dass andere wie gVim und Emacs ähnliche Funktionen haben.


2
Dies ist falsch. Weitere Informationen finden Sie in den Antworten zur Verwendung dreifacher Anführungszeichen.
Fernando Gonzalez Sanchez

10
@FernandoGonzalezSanchez: Es ist wirklich nicht falsch. Diese "mehrzeilige Zeichenfolge als Kommentar" kann am besten als "Pro-Tipp" beschrieben werden. Die offiziellen Python-Dokumente sagen dazu nichts, daher die Frage von OP.
Sanjay T. Sharma

8
Das ist ein PEP für Docstrings; Auf dieser Seite wird "Kommentar" nicht einmal erwähnt.
Sanjay T. Sharma

12

Ich denke nicht, außer dass eine mehrzeilige Zeichenfolge nicht verarbeitet wird. Die meisten, wenn nicht alle Python-IDEs verfügen jedoch über eine Tastenkombination zum Auskommentieren mehrerer Codezeilen.


11

Wenn Sie einen Kommentar eingeben

"""
long comment here
"""

In der Mitte eines Skripts erkennen Python / Linters das nicht. Das Zusammenklappen wird durcheinander gebracht, da der obige Kommentar nicht Teil der Standardempfehlungen ist. Es ist besser zu benutzen

# Long comment
# here.

Wenn Sie Vim verwenden , können Sie Plugins wie comment.vim verwenden , um lange Kommentarzeilen automatisch durch Drücken von zu kommentieren Vjgcc. Wo Vjwählt zwei Codezeilen, undgcc Kommentare sie aus.

Wenn Sie keine Plugins wie die oben genannten verwenden möchten, können Sie Suchen und Ersetzen wie verwenden

:.,.+1s/^/# /g

Dies ersetzt das erste Zeichen in der aktuellen und nächsten Zeile durch #.


8

Es gibt keine Funktion wie einen mehrzeiligen Kommentar. #ist die einzige Möglichkeit, eine einzelne Codezeile zu kommentieren. Viele von Ihnen antworteten auf einen Kommentar als Lösung.

Es scheint zu funktionieren, aber intern '''in Python werden die Zeilen als reguläre Zeichenfolgen eingeschlossen, die der Interpreter nicht ignoriert, wie Kommentare mit #.

Überprüfen Sie die offizielle Dokumentation hier


5

Leider kann die Stringifizierung nicht immer als Kommentar verwendet werden! Es ist also sicherer, sich an den Standard zu halten, bei dem jeder Zeile ein vorangestellt wird# .

Hier ist ein Beispiel:

test1 = [1, 2, 3, 4,]       # test1 contains 4 integers

test2 = [1, 2, '''3, 4,'''] # test2 contains 2 integers **and the string** '3, 4,'

4

Nun, Sie können dies versuchen (wenn Sie das Zitat ausführen, sollte die Eingabe für die erste Frage mit zitiert werden '):

"""
print("What's your name? ")
myName = input()
print("It's nice to meet you " + myName)
print("Number of characters is ")
print(len(myName))
age = input("What's your age? ")
print("You will be " + str(int(age)+1) + " next year.")

"""
a = input()
print(a)
print(a*5)

Was auch immer dazwischen eingeschlossen ist, """wird kommentiert.

Wenn Sie nach einzeiligen Kommentaren suchen, dann ist es #.


3

Mehrzeiliger Kommentar in Python:

Bei mir haben sowohl '' 'als auch "" funktioniert.

Beispiel:

a = 10
b = 20
c = a+b
'''
print ('hello')
'''
print ('Addition is: ', a+b)

Beispiel:

a = 10
b = 20
c = a+b
"""
print('hello')
"""
print('Addition is: ', a+b)

3

Die Inline-Kommentare in Python beginnen mit einem Hash-Zeichen.

hello = "Hello!" # This is an inline comment
print(hello)

Hallo!

Beachten Sie, dass ein Hash-Zeichen in einem String-Literal nur ein Hash-Zeichen ist.

dial = "Dial #100 to make an emergency call."
print(dial)

Wählen Sie # 100, um einen Notruf zu tätigen.

Ein Hash-Zeichen kann auch für ein- oder mehrzeilige Kommentare verwendet werden.

hello = "Hello"
world = "World"
# First print hello
# And print world
print(hello)
print(world)

Hallo

Welt

Schließen Sie den Text in dreifache doppelte Anführungszeichen ein, um die Dokumentzeichenfolge zu unterstützen.

def say_hello(name):
    """
    This is docstring comment and
    it's support multi line.
    :param name it's your name
    :type name str
    """
    return "Hello " + name + '!'


print(say_hello("John"))

Hallo John!

Schließen Sie den Text in dreifache einfache Anführungszeichen für Blockkommentare ein.

'''
I don't care the parameters and
docstrings here.
'''

2

Unter Python 2.7.13:

Single:

"A sample single line comment "

Mehrzeilig:

"""
A sample
multiline comment
on PyCharm
"""

2
Sie sagen, einfache Anführungszeichen erstellen einen Kommentar in Python 2.7?
Mcalex

3
Durch die Verwendung eines einzelnen Satzes von Anführungszeichen wird eine Zeichenfolge erstellt. Einem einzeiligen Kommentar sollte ein # vorangestellt werden.
Johannes

2

Visual Studio Code universeller offizieller mehrzeiliger Kommentarumschalter.

macOS: Wählen Sie Codeblock und dann +/

Windows: Wählen Sie Codeblock und dann Ctrl+/


2

Ja, es ist in Ordnung, beide zu verwenden:

'''
Comments
'''

und

"""
Comments
"""

Das einzige, woran Sie sich alle erinnern müssen, wenn Sie in einer IDE ausgeführt werden, ist, dass Sie die gesamte Datei "LAUFEN" müssen, um als Mehrzeilencode akzeptiert zu werden. Zeile für Zeile 'RUN' funktioniert nicht richtig und zeigt einen Fehler an.


1

Zum Auskommentieren mehrerer Codezeilen in Python verwenden Sie einfach einen #einzeiligen Kommentar in jeder Zeile:

# This is comment 1
# This is comment 2 
# This is comment 3

Um „richtige“ mehrzeilige Kommentare in Python zu schreiben, müssen mehrzeilige Zeichenfolgen mit der """Syntax verwendet werden. Python verfügt über die Funktion für Dokumentationszeichenfolgen (oder Dokumentzeichenfolgen). Es bietet Programmierern eine einfache Möglichkeit, mit jedem Python-Modul, jeder Funktion, Klasse und Methode schnelle Notizen hinzuzufügen.

'''
This is
multiline
comment
'''

Erwähnen Sie außerdem, dass Sie über ein Klassenobjekt wie dieses auf docstring zugreifen können

myobj.__doc__

Was fügt dies gegenüber den vorherigen Antworten hinzu?
Peter Mortensen

Meine Antwort enthält weitere Details, die dem Entwickler möglicherweise weiterhelfen.
Shafik

1

Sie können Folgendes verwenden. Dies wird als DockString bezeichnet.

def my_function(arg1):
    """
    Summary line.
    Extended description of function.
    Parameters:
    arg1 (int): Description of arg1
    Returns:
    int: Description of return value
    """
    return arg1

print my_function.__doc__

"DockString" ? Haben Sie eine Referenz?
Peter Mortensen


1

Ich würde davon abraten, """mehrzeilige Kommentare zu verwenden!

Hier ist ein einfaches Beispiel, um hervorzuheben, was als unerwartetes Verhalten angesehen werden kann:

print('{}\n{}'.format(
    'I am a string',
    """
    Some people consider me a
    multi-line comment, but
    """
    'clearly I am also a string'
    )
)

Schauen Sie sich jetzt die Ausgabe an:

I am a string

    Some people consider me a
    multi-line comment, but
    clearly I am also a string

Die mehrzeilige Zeichenfolge wurde nicht als Kommentar behandelt, sondern mit 'clearly I'm also a string'einer einzelnen Zeichenfolge verknüpft.

Wenn Sie mehrere Zeilen kommentieren möchten, tun Sie dies gemäß den PEP 8- Richtlinien :

print('{}\n{}'.format(
    'I am a string',
    # Some people consider me a
    # multi-line comment, but
    'clearly I am also a string'
    )
)

Ausgabe:

I am a string
clearly I am also a string

Sollte es nicht " lang-bash" statt " bash" für die Syntaxhervorhebung sein? In jedem Fall sieht es normalerweise komisch aus (z. B. für "Einige" hier) - auch wenn es sich tatsächlich um Befehlszeilenbefehle mit Parametern handelt. lang-none(Syntaxhervorhebung deaktiviert) ist möglicherweise die bessere Wahl.
Peter Mortensen

@PeterMortensen danke für den Hinweis auf die seltsame Hervorhebung unserer! Ging mit "lang-none".
Jojo

0

Verwenden der PyCharm-IDE.

Sie können commentund uncommentCodezeilen mit Strg + /. Strg + / kommentiert oder kommentiert die aktuelle Zeile oder mehrere ausgewählte Zeilen mit einzeiligen Kommentaren ({# in Django templates, or # in Python scripts). Pressing Ctrl+Shift+/Für einen ausgewählten Quellcodeblock in einer Django-Vorlage wird der Block mit {% comment %} and {% endcomment %}Tags umgeben.


n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)

print("Loop ended.")

Wählen Sie alle Zeilen aus und drücken Sie Ctrl + /


# n = 5
# while n > 0:
#     n -= 1
#     if n == 2:
#         break
#     print(n)

# print("Loop ended.")

0

Ein mehrzeiliger Kommentar ist in Python nicht vorhanden. Das folgende Beispiel besteht aus einer nicht zugewiesenen Zeichenfolge, die von Python auf syntaktische Fehler überprüft wird.

Einige Texteditoren wie Notepad ++ bieten Verknüpfungen zum Auskommentieren eines geschriebenen Codes oder von Wörtern.

def foo():
    "This is a doc string."
    # A single line comment
    """
       This
       is a multiline
       comment/String
    """
    """
    print "This is a sample foo function"
    print "This function has no arguments"
    """
    return True

Außerdem ist Ctrl+ Keine Verknüpfung in Notepad ++, um Kommentare zu blockieren. Es wird #vor jeder Zeile unter der Auswahl ein eingefügt. Ctrl+ Shift+ KIst für Block uncomment.


0

Unter anderem finde ich es am einfachsten, die IDE-Kommentarfunktionen zu verwenden, die die Python-Kommentarunterstützung von verwenden #.

Ich benutze Anaconda Spyder und es hat:

  • Ctrl+ 1- Kommentar / Kommentar
  • Ctrl+ 4- Kommentieren Sie einen Codeblock
  • Ctrl+ 5- Kommentieren Sie einen Codeblock aus

Es würde eine / mehrere Codezeilen mit / kommentieren / auskommentieren #.

Ich finde es am einfachsten.

Zum Beispiel ein Blockkommentar:

# =============================================================================
#     Sample Commented code in spyder
#  Hello, World!
# =============================================================================

Danke @PeterMortensen für die Bearbeitung :)
aniltilanthe

-2

Wählen Sie die Zeilen aus, die Sie kommentieren möchten, und kommentieren oder kommentieren Sie den Python-Code im Sublime Text- Editor mit Ctrl+ .?

Für eine einzelne Zeile können Sie Shift+ verwenden #.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.