Wie man lesbaren Code schreibt mit PEP8 – Teil 1

PEP 8, manchmal auch PEP8 oder PEP-8 genannt, ist ein Dokument, das Richtlinien und bewährte Verfahren für das Schreiben von Python-Code enthält. Es wurde im Jahr 2001 von Guido van Rossum, Barry Warsaw und Nick Coghlan verfasst. Der Schwerpunkt von PEP 8 liegt auf der Verbesserung der Lesbarkeit und Konsistenz von Python-Code.
PEP steht für Python Enhancement Proposal, und es gibt mehrere davon. Ein PEP ist ein Dokument, das neue Funktionen für Python beschreibt und Aspekte von Python, wie Design und Stil, für die Gemeinschaft dokumentiert.

In diesem Beitrag werden die wichtigsten Richtlinien von PEP 8 beschrieben, so dass er sich in erster Linie an Anfänger und fortgeschrittene Programmierer richtet. Die fortgeschrittenen Themen und damit die vollständigen Richtlinien und Empfehlungen findet man in der PEP 8-Dokumentation. https://peps.python.org/pep-0008/

Warum wir PEP 8 brauchen

PEP 8 wurde entwickelt, um die Lesbarkeit von Python-Code zu verbessern. Aber warum ist Lesbarkeit so wichtig? Warum ist das Schreiben von lesbarem Code eines der Grundprinzipien der Sprache Python?

Wie Guido van Rossum sagte: „Code wird viel öfter gelesen, als er geschrieben wird.“ Man kann ein paar Minuten oder einen ganzen Tag damit verbringen, ein Stück Code zu schreiben, um z.B. die Benutzerauthentifizierung zu verarbeiten. Wenn man ihn einmal geschrieben hat, wird man ihn nie wieder schreiben. Aber man wird ihn auf jeden Fall noch einmal lesen müssen. Dieses Stück Code könnte Teil eines Projekts bleiben, an dem man gerade arbeitet. Jedes Mal, wenn man zu dieser Datei zurückkehrt, muss man sich daran erinnern, was dieser Code tut und warum man ihn geschrieben hat.

Wenn man neu in Python ist, kann es schwierig sein, sich in ein paar Tagen oder Wochen, nachdem man einen Teil des Codes geschrieben hat, daran zu erinnern, was er bewirkt. Wenn man PEP 8 befolgt, kann man sicher sein, dass man die Variablen gut benannt hat. Man wird wissen, dass man genügend Leerraum eingefügt hat, damit es einfacher ist, logischen Schritten im Code zu folgen. Man wird seinen Code auch gut kommentiert haben. All dies bedeutet, dass der Code besser lesbar ist und man leichter darauf zurückkommen kann. Wenn man als Anfänger die Regeln von PEP 8 befolgt, wird das Erlernen von Python zu einer viel angenehmeren Aufgabe.

Wenn man mehr Erfahrung im Schreiben von Python-Code hat, muss man vielleicht mit anderen zusammenarbeiten. Hier ist es wichtig, lesbaren Code zu schreiben. Andere Personen, müssen den Code lesen und verstehen können. Wenn man Richtlinien hat, die man befolgt und anerkennt, wird es für andere einfacher sein, den Code zu lesen.

Die Einhaltung von PEP 8 ist besonders wichtig, wenn man eine Stelle als Software-Entwickler anstrebt. Das Schreiben von klarem, lesbarem Code zeugt von Professionalität. Es zeigt, dass man weiß, wie man Code gut strukturiert.

Namenskonventionen („Naming Convention“)

Wenn man Python-Code schreibt, muss man eine Menge Dinge benennen: Variablen, Funktionen, Klassen, Pakete und so weiter. Wenn man vernünftige Namen wählt, spart man später Zeit und Energie. Man kann anhand des Namens herausfinden, wofür eine bestimmte Variable, Funktion oder Klasse steht. Außerdem vermeidet man die Verwendung unpassender Namen, die zu Fehlern führen können, die dann schwer zu beheben sind.

Hinweis: Man sollte niemals Namen mit nur einem Buchstaben wie l, O oder I verwenden, da diese je nach Schriftart mit 1 und 0 verwechselt werden können:

O = 2 # Dies könnte so aussehen, als ob man versuchen würden, die 2 der Null zuzuordnen.

Benennungsstile („Naming Styles“)

Die folgende Tabelle gibt einen Überblick über einige der gebräuchlichen Benennungsstile in Python-Code und wann man diese verwenden sollte:

TypNaming ConventionBeispiel
Funktion („function“)ein oder mehrere klein geschriebene Wörter; Wörter durch Unterstriche trennenfunction, my_function
Variable („variable“)einen einzelnen Kleinbuchstaben, ein Wort oder mehrere Wörter; Wörter durch Unterstriche trennenx, var, my_variable
Klasse („class“)jedes Wort mit einem Großbuchstaben beginnen; Wörter nicht durch Unterstriche trennen. Diese Schreibweise wird als Camel- oder Pascal-Case bezeichnet.Model, MyClass
Methode („method“)ein oder mehrere klein geschriebene Wörter; Wörter durch Unterstriche trennenclass_method, method
Konstante („constant“)einen einzelnen Buchstaben, ein Wort oder mehrere Wörter in Großbuchstaben verwenden; Wörter durch Unterstriche trennenCONSTANT, MY_CONSTANT, MY_LONG_CONSTANT
Module („module“)ein kurzes, klein geschriebenes Wort oder Wörter; Wörter durch Unterstriche trennenmodule.py, my_module.py
Package („package“)ein kurzes, klein geschriebenes Wort oder Wörter; Wörter nicht durch Unterstriche trennenpackage, mypackage

Dies sind einige der üblichen Namenskonventionen und Beispiele für ihre Verwendung. Um lesbaren Code zu schreiben, muss man aber dennoch auf die Wahl der Buchstaben und Wörter achten. Man muss nicht nur die richtigen Benennungsstile im Code wählen, sondern auch die Namen sorgfältig auswählen. Im Folgenden gibt es einige Hinweise, wie man dies so effektiv wie möglich tun kann.

Wie man Namen auswählt

Die Wahl der Namen für die Variablen, Funktionen, Klassen usw. kann eine Herausforderung sein. Man sollte sich beim Schreiben von Code viele Gedanken über die Wahl der Namen machen, da dies die Lesbarkeit des Codes erhöht. Am besten benennt man Objekte in Python mit beschreibenden Namen, die deutlich machen, was das Objekt darstellt.

Wenn man Variablen benennt, ist man vielleicht versucht, einfache Namen mit nur einem Buchstaben in Kleinbuchstaben zu wählen, wie z. B. x. Aber wenn man x nicht als Argument einer mathematischen Funktion verwendet, ist nicht klar, was x darstellt. Wenn man z.B. den Namen einer Person speichert als Zeichenkette, und ihn mit Hilfe von String Slicing anders formatieren möchte, dann könnte das Ergebnis etwa so aussehen:

>>> # nicht empfohlen
>>> x = 'John Smith'
>>> y, z = x.split()
>>> print(z, y, sep=', ')
'Smith, John'

Das wird funktionieren, aber man mussn sich merken, was x, y und z bedeuten. Außerdem kann es für andere Programmierer verwirrend sein. Eine viel klarere Wahl der Namen könnte so aussehen:

>>> # empfohlen
>>> name = 'John Smith'
>>> first_name, last_name = name.split()
>>> print(last_name, first_name, sep=', ')
'Smith, John'

Ebenso kann es verlockend sein, bei der Wahl der Namen Abkürzungen zu verwenden, um die Tipparbeit zu reduzieren. Im folgenden Beispiel wird eine Funktion db() definiert, die ein einzelnes Argument x annimmt und es verdoppelt:

# nicht empfohlen
def db(x):
    return x * 2

Auf den ersten Blick scheint dies eine vernünftige Wahl zu sein. db() könnte einfach eine Abkürzung für double sein. Aber wenn man sich vorstellt, dass man in ein paar Tagen auf diesen Code zurückkommt, dann hat man vielleicht vergessen, was man mit dieser Funktion erreichen wollte, und das würde es schwierig machen, zu erraten, wie man sie abgekürzt hat.

Das folgende Beispiel ist viel verständlicher. Wenn man einige Tage nach dem Schreiben zu diesem Code zurückkehrt, wird man immer noch in der Lage sein, den Zweck dieser Funktion zu lesen und zu verstehen:

# empfohlen
def multiply_by_two(x):
    return x * 2