Seite 1 von 1

Kommentare

Verfasst: Montag 19. März 2007, 13:53
von blubber
Hi,

bin noch ein Neuling bei der Programmiersprache Python, bisher jedoch sehr begeistert, da ich bis jetzt eigentlich nur Vorteile in der Syntax gefunden habe (im Vergleich zu anderen Sprachen). Nun bin ich aber doch auf ein simples Thema gestoßen und zu meiner Verwunderung fand ich bisher keine Lösung: Kommentare!
Eine einzelne Zeile auskommentieren, kein Problem. Doch wie kommentiere ich einen ganzen Codeblock aus? Alla /* .... */ in C etc. Geht das in Python überhaupt? Wäre blöd, wenn nicht, weil es lästig wäre, wenn man mal "kurz" 100 Zeilen Code auskommentieren sollte....

Re: Kommentare

Verfasst: Montag 19. März 2007, 13:59
von gerold
blubber hat geschrieben:Wäre blöd, wenn nicht, weil es lästig wäre, wenn man mal "kurz" 100 Zeilen Code auskommentieren sollte....
Hi blubber!

Willkommen im Python-Forum!

Es gibt nur die Möglichkeit, einzelne Zeilen als Kommentar zu markieren. Das entspricht dem "Es sollte nur eine Möglichkeit geben, etwas zu tun."

Aber keine Angst. Jeder gute Programmiereditor macht das für dich. Du musst also nicht 100 mal das Doppelkreuz schreiben, um 100 Zeilen auszukommentieren.

mfg
Gerold
:-)

Verfasst: Montag 19. März 2007, 13:59
von BlackJack
Da bieten eigentlich alle vernünftigen Editoren eine Funktion zum Aus- und Einkommentieren von markiertem Text.

Verfasst: Montag 19. März 2007, 14:00
von rafael
Hiho,

gibt afaik keine ander Möglichkeit als in jeder Zeile dieses "#" für ein Kommentar zu setzen. Aber wenn du funktionen beschreibst, ist es besser Docstrings zu nutzen. :D

//edit: BlackJack und gerold waren schneller

Verfasst: Montag 19. März 2007, 14:08
von blubber
Ja ok, Danke für die schnellen Antworten !

Verfasst: Montag 19. März 2007, 14:37
von Michael Schneider
Hi,

solche Blockkommentare gibt es in Python nicht, werden meiner Meinung nach auch nicht benötigt. Wenn man etwas kommentieren möchte, benutzt man die Raute:

Code: Alles auswählen

# dies ist ein Kommentar
Aber das wirklich Geniale an Python ist die automatische Dokumentation!

Code: Alles auswählen

class Beispiel:
    """Diese Klasse dient zur Veranschaulichung der Auto-Dokumentation

    Enthaltene Methoden:
        anzeigen - bla, bla"""

    def __init__(self, args):
        "Konstruktor von Beispiel"
        pass

    def anzeigen(self, args):
        """Hier kommt wieder eine
        umfassende Dokumentation."""
        pass

print "Dokumentationsstring:", Beispiel.__doc__
help(Beispiel)
Man kann kaum zuviel kommentieren. Aber im Gegensatz zu C kann man sie hier viel besser nutzen. Also: statt auskommentieren lieber in Methoden aufteilen, die Du dann dokumentierst.

Grüße,
Michael

Verfasst: Montag 19. März 2007, 16:38
von Y0Gi
Man kann auch Multiline-String-Marken für Blockkommentare verwenden. Das ist zwar semantisch nicht korrekt oder zumindest sinnvoll (es werden Strings erzeugt, aber nicht referenziert, also gleich wieder vom Garbage Collector eingesammelt), aber syntaktisch in Ordnung:

Code: Alles auswählen

print 'hallo'

"""
print 'banane'
print ', '.join(['Hund', 'Katze', 'Maus'])
"""

print 'Dies sollte die zweite Zeile sein.'
Dennoch ist die Editor-Hilfe zum Auskommentieren mehrerer Zeilen vorzuziehen. Da kann es allerdings Probleme geben, wenn darin selbst Kommentarzeilen enthalten sind und die dann wieder einkommentiert werden.


Michael Schneider hat geschrieben:

Code: Alles auswählen

class Beispiel:
    """Diese Klasse dient zur Veranschaulichung der Auto-Dokumentation

    Enthaltene Methoden:
        anzeigen - bla, bla"""

    def __init__(self, args):
        "Konstruktor von Beispiel"
        pass

    def anzeigen(self, args):
        """Hier kommt wieder eine
        umfassende Dokumentation."""
        pass
Dazu: PEP8-konform sollten die Docstrings *immer* dreifache doppelte Anführungzeichen sein, entweder Einzeiler inklusive der String-Marker sein oder ansonsten nach der ersten Zeile (inkl. Anfangs-Marker) eine Leerzeile folgen sowie die End-Marker in einer eigenen Zeile stehen.

Weiterhin komplettieren Docstrings Klassen-/Funktions-/Methoden-Definitionen bereits, ein 'pass' wird nicht mehr benötigt.

Umsetzung:

Code: Alles auswählen

class Beispiel:
    """Diese Klasse dient zur Veranschaulichung der Auto-Dokumentation

    Enthaltene Methoden:
        anzeigen - bla, bla
    """

    def __init__(self, args):
        """Konstruktor von Beispiel"""

    def anzeigen(self, args):
        """Hier kommt wieder eine umfassende Dokumentation."""

Verfasst: Montag 19. März 2007, 17:24
von birkenfeld
Werde ich jetzt gesteinigt, wenn ich

Code: Alles auswählen

def func(foo, bar, xyzzy):
    """
    Return a fooized version of xyzzy.

    Raises RandomError on failure.
    """
schreibe?

Verfasst: Montag 19. März 2007, 18:04
von mitsuhiko
birkenfeld: negativ. Die Art der Einrückung verwend ich auch :D

Verfasst: Montag 19. März 2007, 21:44
von Leonidas
Y0Gi hat geschrieben:Dennoch ist die Editor-Hilfe zum Auskommentieren mehrerer Zeilen vorzuziehen. Da kann es allerdings Probleme geben, wenn darin selbst Kommentarzeilen enthalten sind und die dann wieder einkommentiert werden.
In der Regel stellt sich dieses Problem gar nicht. Denn die Zeilen müssen ja nicht umbedigt ausgewertet - zwei Kommentarrauten in einer Zeile sind wunderbar gültig, d.h. wenn ein Kommentar in der Zeile steht ist es kein Problem ihn nochmal auszukommentieren. Natürlich sehen doppelte Kommentare unschön aus, aber ich halte Blockkommentare sowieso nur für temporäre Kommentare, die man wieder löscht, nachdem sie ihre Aufgabe erfüllt haben.

Mit dem Visual Mode kann man in Vim wunderbar Zeilen aus und einkommentieren, da bin ich sogar von dessen Benutzerfreundlichkeit ausnahmsweise mal erstaunt.

Verfasst: Montag 19. März 2007, 21:56
von sape
Leonidas hat geschrieben:[...]Natürlich sehen doppelte Kommentare unschön aus, aber ich halte Blockkommentare sowieso nur für temporäre Kommentare, die man wieder löscht, nachdem sie ihre Aufgabe erfüllt haben.[...]
Genau so sehe ich das auch. In eclipse nutze ich Block-Comments (STRG+4 Kommentieren, STRG+5 dekommentieren) oft um temporär was auszukommentieren um eine andere Möglichkeit zu testen. Danach lösche ich den Block-Comment oder dekommentiere es wider falls die andere Möglichkeit doch nicht so gut ist. -- Allso ich sehe da auch kein Problem.

Verfasst: Dienstag 20. März 2007, 12:21
von Y0Gi
Das Problem wären nicht zwei Kommentarzeichen. Das Problem besteht dann wenn der Editor bereits vorhandene einzelne Kommentarzeichen entfernt.

Oder willst du mir sagen, dass du Kommentarzeilen immer mit zwei Kommentarzeichen einleitest, damit o.g. noch eines übrig lässt und der Kommentar als solcher erhalten bleibt?

birkenfeld: Ich habe nur genannt, was PEP 8 und 257 vorschlagen - wobei auch deine Möglichkeit nicht explizit ausgeschlossen wird. Sie ist in jedem Fall akzeptabel - hauptsache konsistent verwendet.

Verfasst: Dienstag 20. März 2007, 14:11
von Michael Schneider
Hi,

also ich benutze immer doppelte Kommentarzeichen, wenn ein Kommentar dauerhaft (zur Dokumentation) eingefügt wurde. So kann ich ihn schnell von den Zeilen unterscheiden, die nur temporär entfernt wurden.

Und ja, das steht auch nicht im PEP. :lol:

Grüße,
Michel

Verfasst: Dienstag 20. März 2007, 14:45
von BlackJack
Also ich erkenne Zeilen die nur temporär auskommentiert wurden, immer daran, dass da keine Kommentare stehen, sondern Quelltext.

Ich bemühe mich auch, dass solche Blöcke gar nicht erst so lange da stehen, dass ich sie vergessen könnte. Im Zweifelsfall lösche ich sie einfach. Wenn ich den Quelltext später doch mal wieder brauche, ist er ja noch in der Versionsverwaltung.