Ein alter Bekannter sagte immer: “Quellcode ist da um gelesen zu werden”. Genau darum geht es.
Wie schreibt man guten Python Code? Was ist guter Code überhaupt? Für manche (mich damals eingeschlossen) mag das jetzt etwas hart klingen, aber dynamische Sprachen wie PHP, oder Python benutzt man nicht, um besonders effiziente Programme zu schreiben. Das können die hardwarenahen Sprachen wie C und Assembler besser. Python ist cool, weil man damit sehr schnell etwas zum Laufen bringen kann und der Code meist sehr einfach zu lesen und zu verstehen ist. Meistens… Segen und Fluch der Tatsache, dass Programme fast schneller gecodet als geplant sind ist ein leider allzu oft resultierender unlesbarer Spagetticode. Um das zu verhindert habe ich im Laufe der Jahre ein paar Grundregeln der Pythonprogrammierung aufgestellt, mit denen der Code besonders schön wird. Viel Spaß beim Lesen!
- PEP8 Die Pythonentwickler propagieren auf ihrer Webseite den Style Guide for Python Code. Ihr tut gut daran zumindest mal reingeguckt zu haben. Das Dokument findet ihr hier.
- Linting Benutzt auf jeden Fall ein Linter Tool. Pylint ist eine gute Variante. Das hilft nicht nur den Code lesbarer zu machen, sondern deutet auch hin und wieder auf strukturelle Probleme hin.
- Autoformater Black, Autopep8 etc. Egal welcher euch gut gefällt. Benutzt einen und stellt sicher, dass alle Entwickler die am selben Projekt arbeiten denselben benutzen. Vor allem bei Python ist es wichtig, dass es eine einheitliche Regelung zum Thema Tab vs Leertaste oder Doublequotes vs Singlequotes gibt.
- Zeilenlänge Auch wenn es ein Artefakt als längst vergangener Zeit ist, in der die Monitore noch Würfelförmig waren: Haltet eure Zeilen unter 100, besser unter 80 Zeichen. Es gibt nichts Schlimmeres als Zeilenumbrüche im Python Code. Entwickler, die euren Code pflegen, werden es euch danken. Diese Regel verhindert übrigens auch, dass ihr zu viele Funktionen in einer einzelnen Zeile kaskadiert und dadurch unlesbare Monstren erschafft. ;)
- Funktionslänge Versucht die Zeilenlänge von 5 Zeilen pro Funktion nicht zu überschreiten. Eine Funktion sollte genau eine Sache tun. Falls man einen Teil aus einer Funktion in eine neue Funktion schieben kann, sollte man das auch tun!
- Kurzer Code Lest euren Code durch bevor ihr ihn eincheckt. Kann man irgendwas durch Pythons Build-in Funktionen umsetzen? Funktionen wie map() oder filter() können durchaus die ein oder andere For-Schleife ersetzen.
- Einrückungen Beschränkt euch auf 2 Einrückungsblöcke pro Funktion. Solltet ihr mehr brauchen macht eure Funktion zu viele Dinge. In dem Fall solltet ihr sie in mehrere Funktionen aufspalten (Siehe Regel 5).
- Parameter Funktionen sollten nicht mehr als 3 Parameter haben. Besser sind 2 oder weniger. Seid ihr der Meinung, dass das gar nicht funktionieren kann, ist es ein gutes Zeichen dafür, dass ihr die ein oder andere Klasse erschaffen solltet oder dass eure Funktionen zu groß sind.
- Kommentare Kommentare sind dazu da unlesbaren Code verständlich zu machen. Da es in diesem Text darum geht, gut lesbaren Code zu schreiben sollten Kommentare überflüssig sein. Versucht die Dinge im Code zu erklären, indem ihr Funktionen und Variablen sprechend benennt. Ausnahmen in denen Kommentare durchaus Sinn ergeben sind schwer lesbare Fragmente wie etwa reguläre Ausdrücke. Docstrings zählen in meinen Augen nicht zu den Kommentaren und sind demnach Pflicht für jedes Modul.
Konnte ich helfen? Ich freue mich über einen Drink!
💙