PEP 8 Code-Stil in Python anwenden

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Lab lernen Sie, wie Sie den PEP 8 Style Guide auf Ihren Python-Code anwenden. PEP 8 bietet eine Reihe von Empfehlungen für das Schreiben von lesbarem und konsistentem Python-Code, die Aspekte wie Einrückung, Zeilenlänge, Abstände und Namenskonventionen abdecken.

Durch praktische Übungen üben Sie die Implementierung der PEP 8-Richtlinien für Einrückung und Zeilenlänge, erkunden Abstandsregeln und andere Vorschläge und entdecken, wie Sie das Tool autopep8 für die automatische Codeformatierung verwenden. Am Ende dieses Labs sind Sie in der Lage, wartbareren und ästhetisch ansprechenderen Python-Code zu schreiben, der den Community-Standards entspricht.

PEP 8 Einrückung und Zeilenlänge verstehen

In diesem Schritt werden wir die PEP 8-Richtlinien für Einrückung und Zeilenlänge in Python-Code untersuchen. Korrekte Einrückung und Zeilenlänge sind entscheidend für die Lesbarkeit und Konsistenz des Codes.

Gemäß PEP 8 sollte jede Einrückungsebene 4 Leerzeichen verwenden. Beim Fortsetzen einer Zeile können Sie entweder die umgebrochenen Elemente vertikal innerhalb von Klammern, eckigen Klammern oder geschweiften Klammern ausrichten oder eine hängende Einrückung verwenden. Bei hängenden Einrückungen sollte die erste Zeile keine Argumente enthalten, und eine weitere Einrückung wird verwendet, um nachfolgende Zeilen zu unterscheiden.

Erstellen wir eine Python-Datei, um die Einrückung zu üben. Öffnen Sie das integrierte Terminal in der WebIDE und navigieren Sie zum Verzeichnis ~/project, falls Sie sich nicht bereits dort befinden.

Erstellen Sie eine neue Datei namens indentation_example.py im Verzeichnis ~/project mit dem Dateiexplorer der WebIDE oder über die Befehlszeile:

touch ~/project/indentation_example.py

Öffnen Sie nun indentation_example.py im Editor der WebIDE und fügen Sie den folgenden Code hinzu, wobei Sie genau auf die Einrückung achten:

## Correct indentation examples

## Add 4 spaces (an extra level of indentation) to distinguish arguments from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

## Align with the opening delimiter.
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

## Hanging indents should add a level.
bar = long_function_name(
    var_one, var_two,
    var_three, var_four)

## Multi-line structure with closing delimiter aligned below the first non-whitespace character of the last line.
my_list = [
    1, 2, 3,
    4, 5, 6,
    ]

Speichern Sie die Datei. Sie können dieses Skript mit dem Befehl ausführen:

python ~/project/indentation_example.py

Die Ausgabe sollte lauten:

var_one
var_one
var_one

Betrachten wir als Nächstes die Zeilenlänge. PEP 8 empfiehlt, Zeilen auf maximal 79 Zeichen zu beschränken und Dokumentationsstrings/Kommentare auf 72 Zeichen. Dies trägt zur Verbesserung der Lesbarkeit bei, insbesondere beim Betrachten von Code auf kleineren Bildschirmen oder nebeneinander.

Obwohl der WebIDE-Editor dies standardmäßig möglicherweise nicht visuell erzwingt, ist es eine gute Praxis, dies beim Schreiben von Code zu beachten.

PEP 8 Abstandsregeln üben

In diesem Schritt konzentrieren wir uns auf die PEP 8-Richtlinien bezüglich der Verwendung von Leerzeichen in Python-Code. Konsistente Abstände verbessern die Lesbarkeit des Codes erheblich.

PEP 8 gibt mehrere Empfehlungen für die Verwendung von Leerzeichen, insbesondere wo zusätzliche Leerzeichen vermieden werden sollten. Schauen wir uns einige gängige Szenarien an.

Vermeiden Sie übermäßige Leerzeichen in den folgenden Situationen:

  • Unmittelbar innerhalb von runden Klammern, eckigen Klammern oder geschweiften Klammern.
  • Unmittelbar vor einem Komma, Semikolon oder Doppelpunkt.
  • Bei Slices sollte der Doppelpunkt auf beiden Seiten den gleichen Abstand haben. Wenn ein Slice-Parameter weggelassen wird, sollte auch das Leerzeichen weggelassen werden.
  • Unmittelbar vor der öffnenden Klammer, die die Argumentenliste eines Funktionsaufrufs beginnt.
  • Unmittelbar vor der öffnenden eckigen Klammer, die einen Index oder Slice beginnt.
  • Mehr als ein Leerzeichen um einen Zuweisungsoperator (oder einen anderen Operator), um ihn mit einem anderen auszurichten.

Erstellen wir eine neue Python-Datei namens spacing_example.py im Verzeichnis ~/project, um diese Abstandsregeln zu üben.

touch ~/project/spacing_example.py

Öffnen Sie spacing_example.py im Editor der WebIDE und fügen Sie den folgenden Code hinzu, der sowohl korrekte als auch inkorrekte Abstände gemäß PEP 8 demonstriert:

## Correct spacing examples
spam(ham[1], {eggs: 2})
if x == 4: print(x, y); x, y = y, x
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower + offset : upper + offset]
spam(1)
dct['key'] = lst[index]
x = 1
y = 2
long_variable = 3

## Incorrect spacing examples (for demonstration)
## spam( ham[ 1 ], { eggs: 2 } )
## if x == 4 : print x , y ; x , y = y , x
## ham[lower + offset:upper + offset]
## ham[1: 9], ham[1 :9], ham[1:9 :3]
## ham[lower : : upper]
## ham[ : upper]
## spam (1)
## dct ['key'] = lst [index]
## x             = 1
## y             = 2
## long_variable = 3

Speichern Sie die Datei. Sie können dieses Skript ausführen, obwohl es keine Ausgabe erzeugt, da es nur Definitionen und Zuweisungen enthält:

python ~/project/spacing_example.py

Weitere Vorschläge für Abstände sind, nachgestellte Leerzeichen am Ende von Zeilen zu vermeiden und keine Leerzeichen um das Gleichheitszeichen für Schlüsselwortargumente oder Standardparameterwerte in Funktionsdefinitionen zu verwenden.

## Correct example for keyword arguments and default values
def complex(real, imag=0.0):
    return magic(r=real, i=imag)

## Incorrect example
## def complex(real, imag = 0.0):
##     return magic(r = real, i = imag)

Durch das Üben dieser Abstandsregeln wird Ihr Python-Code konsistenter und für andere (und Sie selbst) leichter lesbar.

PEP 8 Kodierung und weitere Vorschläge erkunden

In diesem Schritt befassen wir uns mit den Empfehlungen von PEP 8 bezüglich der Kodierung von Quelldateien und einigen weiteren allgemeinen Vorschlägen für das Schreiben von sauberem Python-Code.

Standardmäßig werden Python 3-Quelldateien als UTF-8-kodiert behandelt. Es ist eine gute Praxis, die Kodierung explizit anzugeben, insbesondere wenn Ihr Code Nicht-ASCII-Zeichen verwendet. Sie können dies tun, indem Sie einen speziellen Kommentar als erste oder zweite Zeile der Datei einfügen.

Um beispielsweise die UTF-8-Kodierung anzugeben:

## -*- coding: utf-8 -*-

Ein weiterer wichtiger Vorschlag von PEP 8 betrifft nachgestellte Kommas. Nachgestellte Kommas sind oft optional, aber sie sind erforderlich, wenn ein Tupel mit einem einzigen Element erstellt wird, um es von einem einfachen Klammerausdruck zu unterscheiden. Zur Klarheit wird empfohlen, Klammern zu verwenden, wenn Tupel mit einem Element erstellt werden.

Erstellen wir eine neue Python-Datei namens encoding_and_others.py im Verzeichnis ~/project, um diese Punkte zu demonstrieren.

touch ~/project/encoding_and_others.py

Öffnen Sie encoding_and_others.py im Editor der WebIDE und fügen Sie den folgenden Code hinzu:

## -*- coding: utf-8 -*-

## Example using a non-ASCII character
message = "你好,世界!"
print(message)

## Correct way to create a single-element tuple
name = ("sam",)
print(type(name))

## Incorrect way (creates a string, not a tuple)
## another_name = "sam"
## print(type(another_name))

Speichern Sie die Datei. Führen Sie nun das Skript aus:

python ~/project/encoding_and_others.py

Sie sollten die folgende Ausgabe sehen:

你好, 世界!
<class 'tuple'>

Dies demonstriert die korrekte Handhabung der UTF-8-Kodierung und die Erstellung eines Tupels mit einem Element.

PEP 8 schlägt auch vor, Code so zu schreiben, dass er andere Python-Implementierungen wie PyPy, Jython, IronPython usw. nicht negativ beeinflusst. Dies bedeutet im Allgemeinen, sich an Standard-Python-Funktionen zu halten und implementierungsspezifische Verhaltensweisen zu vermeiden, es sei denn, dies ist notwendig.

Durch die Befolgung dieser Kodierungs- und anderer allgemeiner Vorschläge tragen Sie dazu bei, portableren und wartbareren Python-Code zu schreiben.

autopep8 für automatische Formatierung verwenden

In diesem Schritt lernen wir, wie man autopep8 verwendet, ein Tool, das Python-Code automatisch formatiert, um den PEP 8 Style Guide einzuhalten. Während das Verständnis der Regeln wichtig ist, können Tools wie autopep8 erheblich dazu beitragen, einen konsistenten Code-Stil beizubehalten.

Zuerst müssen wir das Paket autopep8 installieren. Öffnen Sie das integrierte Terminal in der WebIDE und führen Sie den folgenden Befehl aus:

sudo pip3 install autopep8

Sie sollten eine Ausgabe sehen, die den Installationsprozess anzeigt, ähnlich wie diese:

Collecting autopep8
  ...
Installing collected packages: autopep8
Successfully installed autopep8-X.Y.Z

Nun erstellen wir eine Python-Datei mit absichtlich schlechter Formatierung, um zu sehen, wie autopep8 sie beheben kann. Erstellen Sie eine neue Datei namens unformatted_code.py im Verzeichnis ~/project.

touch ~/project/unformatted_code.py

Öffnen Sie unformatted_code.py im Editor der WebIDE und fügen Sie den folgenden Code ein:

a=1
b=2;
print(a )
print( b)
def  my_function ( arg1 , arg2 = 0 ):
    result = arg1+arg2
    return result

Speichern Sie die Datei. Dieser Code hat inkonsistente Abstände, ein Semikolon und eine schlechte Einrückung in der Funktionsdefinition.

Jetzt können wir autopep8 verwenden, um diese Datei zu formatieren. Führen Sie im Terminal den folgenden Befehl aus:

autopep8 --in-place ~/project/unformatted_code.py

Das Flag --in-place weist autopep8 an, die Datei direkt zu ändern.

Nachdem Sie den Befehl ausgeführt haben, öffnen Sie unformatted_code.py erneut im Editor der WebIDE. Sie sollten sehen, dass der Code automatisch formatiert wurde, um PEP 8 zu entsprechen:

a = 1
b = 2
print(a)
print(b)


def my_function(arg1, arg2=0):
    result = arg1 + arg2
    return result

Beachten Sie, wie autopep8 die Abstände um Operatoren korrigiert, das Semikolon entfernt, die Einrückung korrigiert und dort, wo es angebracht ist, Leerzeilen hinzugefügt hat (zwei Leerzeilen vor der Funktionsdefinition).

Sie können autopep8 auch ohne das Flag --in-place verwenden, um die formatierte Ausgabe im Terminal anzuzeigen, ohne die Originaldatei zu ändern:

autopep8 ~/project/unformatted_code.py

Obwohl autopep8 ein leistungsfähiges Werkzeug für die automatische Formatierung ist, ist es wichtig zu bedenken, dass es hauptsächlich stilistische Probleme behebt. Es kann keine logischen Fehler beheben oder die Gesamtstruktur Ihres Codes verbessern. Es wird am besten als Hilfsmittel verwendet, um Konsistenz zu wahren, nachdem Sie den Code geschrieben haben.

Viele Code-Editoren, einschließlich der WebIDE (VS Code), verfügen über integrierte Unterstützung oder Erweiterungen für Code-Formatierer wie autopep8. In VS Code können Sie oft mit der rechten Maustaste in den Editor klicken und "Dokument formatieren" auswählen, um den konfigurierten Formatierer anzuwenden. Für diese Übung haben wir uns jedoch auf die Verwendung des Befehlszeilen-Tools konzentriert, um dessen grundlegende Verwendung zu verstehen.

Zusammenfassung

In diesem Lab haben wir uns mit der Anwendung des PEP 8 Code-Stils in Python beschäftigt. Wir begannen mit dem Verständnis der Richtlinien für Einrückung und Zeilenlänge und übten mit Beispielen für 4-Leerzeichen-Einrückung und berücksichtigten die empfohlenen Zeilenlimits. Anschließend untersuchten wir die Abstandsregeln von PEP 8, einschließlich der Verwendung von Leerzeilen zur Trennung von Funktionen und Klassen sowie der korrekten Verwendung von Leerzeichen um Operatoren und nach Kommas. Schließlich befassten wir uns mit weiteren PEP 8-Vorschlägen wie Kodierungsdeklarationen und Namenskonventionen und lernten, wie das Tool autopep8 verwendet wird, um unseren Python-Code automatisch gemäß den PEP 8-Standards zu formatieren.