Python
Dies soll eine Art Lernplan für selbstgesteuertes Python-lernen sein. Ziel ist, dass du etwas bauen kannst, was du cool findest.
- Dazu bieten die Lektionen Lernmaterial und -Aufgaben, um dich zum “Bauen” zu befähigen.
- Die Bausteine sind Bibliotheken und Ressourcen, aus denen sich unserer Einschätzung nach coole Dinge bauen lassen. Du kannst natürlich auch mit allen möglichen anderen Dingen bauen, die du cool findest.
Das meiste verlinkte Material hier ist nicht von uns. Dieses Dokument ist eine “Compilation” von verschiedenen (unserer Meinung nach sehr guten) Lernressourcen. Dadurch sind die Ressourcen viel besser, als wir sie selbst schreiben könnten. Leider gibt es dadurch manchmal “rough edges”, d.h. vielleicht wird auf etwas Unbekanntes oder Unwichtiges verwiesen.
Gebt uns gerne Verbesserungsvorschläge und Feedback!
Lektionen
Die Lektionen sind aufgeteilt in Pflicht, Grauzone und Kür.
- Wir halten die Kenntnisse der Pflicht-Lektionen für grundlegend notwendig. Wenn ihr die Inhalte nicht kennt, fangt hier an. Ihr könnte natürlich Lektionen (oder den gesamten Teil) überfliegen bzw. überspringen, wenn ihr die Inhalte schon kennt.
- Bei Grauzone sind wir uns uneinig, ob die konkrete Lektion Pflicht oder Kür sein sollte.
- Die Kür-Lektionen sind nicht grundsätzliche notwendig, können aber durchaus hilfreich sein.
Pflicht
Die (meisten) Lektionen haben unten Aufgaben und eine kurze Zusammenfassung (“Key Points”). Falls du Vorkenntnisse hast, kannst du sie so überprüfen bzw. auffrischen.
Das meiste Material ist aus dem Python Kurs von Software Carpentry, den wir geforked haben, um ein paar Data Science Besonderheiten rauszunehmen. Falls dich Data Science interessiert, bietet sich der gesamte Kurs als “Pflicht” an.
Alternativ gibt es auch How to Think Like a Computer Scientist, der nochmal deutlich umfangreicher ist. Schau dort mal rein, falls du z.B. eine alternative Erklärung suchst. Falls du etwas in Richtung AI bzw. Machine Learning machen möchtest, könnte fast.ai’s “Practical Deep Learning”-Kurs interessant sein.
Lernplan
- Einrichten der Arbeitsumgebung. Relevante Abschnitte: Installation, Code ausführen, Autocomplete, Linting, Debugging.
- Variablen / Typen
-
Tipp: f-strings. So kannst du Ausdrücke in einen String einbetten, z.B:
x = 2 print(f"x mal zwei ist: {x * 3}")
-
Für kleine Experimente bietet sich die REPL an, also wenn du Python interaktiv im Terminal benutzt. Dazu ein Terminal aufmachen,
python3
(evtl. abhängig von Betriebssystem) eintippen, Enter und schon sollte dich der Python-Interpreter mit>>>
begrüßen. Jetzt kannst du Ausdrücke eingeben und mit Enter auswerten.
-
- Lists
- Loops
- If
- Functions
- Fehler verstehen
- Dicts
- Dokumentation finden und lesen
- Debugging
- Außerdem die VS Code Dokumentation zu Python Debugging
try
,except
Grauzone
Hier sind wir uns uneinig, ob’s Pflicht oder Kür sein sollte.
- Asserts und kleine Tests
-
Objektorientiere Programmierung (OOP)
Bei einigen Bibliotheken oder Frameworks werdet ihr eventuell auf Objektorientiere Programmierung stoßen. Dann ist es notwendig zu wissen, wie man damit umgeht.
Konzepte
- Objekt, Klasse, Methode, State
- Objekt instanziieren
- Methoden aufrufen
Materialien
- Kleiner Einstig
- Falls man mit Videos lernen möchte: Corey Shafer’s OOP Tutorial
- Class vs. Instance Variables
Kür
- Dateien lesen/schreiben mit
open
-
Daten (zwischen)speichern mit dem
json
Modul.Die Idee: mit
dump
bzw.dumps
können Objekte zu Strings serialisiert, dann z.B. als Text in eine Datei gespeichert, und später mitload
bzw.loads
wieder zu Objekten deserialisiert werden. Es gibt Python-spezifische Alternativen wiepickle
, aber json-format ist hier der de-facto Standard (falls es einen gibt). - Programm-Architektur
- Code formatieren mit
black
, Linting mitpylint
(VS Code Docs, Typ-Annotationen und -Checking mitmypy
) - async / await: FastAPI’s “Concurrency and async/await” Tutorial
- decorator: werden oft von Bibliotheken oder Frameworks benutzt, um Funktionen, die man selber schreibt, als besonders oder relevant für das besagte Framework zu “markieren”
- Funktional Programmieren. Die Introduction vom Python HOWTO begründet sehr schön, warum das toll ist. Das HOWTO zeigt danach aber IMHO eher unspannende oder komplizierte Sachen. Hier ein paar Vorschläge:
- Tuple, NamedTuple, evtl. Data Classes als grundlegende Daten-Objekte
- pattern matching
- List comprehension, Dict comprehension statt simpler for-loops.
- Writing Command line Programs
- Depency Management:
requirements.txt
+ venv: Wird irgendwann nötig, wenn man Bibliotheken nutzen möchte. - Dunder/Magic Funktionen
- Ein bisschen Spaß haben
Bausteine
Hier ein paar Vorschläge, was wir so cool finden und/oder kennen.
Falls du dich für etwas bestimmtes interessierst, gibt es gute Chancen, dass es passende Python-Bibliotheken gibt. Frag’ gerne uns Mentor*innen, ob wir Vorschläge haben oder google einfach mal.
Bibliotheken
- discord.py: Discord Bots bauen
- erfordert den Umgang mit Objekt-orientierter Programmierung und async/await
- python-telegram-bot
- Tekore: Spotify API
- Game Engines
- HTTP-Client: requests, aiohttp (für discord.py), Beautiful Soup, scrapy
- HTTP-Server: Flask, FastAPI, Django
- Falls man mit Videos lernen möchte, ist Corey Shafer’s Django Tutorial sehenswert
- numpy / matplotlib
- Pillow: Bildbearbeitung
- tkinter: GUIs
- youtube-dl: Videos von YouTube und vielen anderen Plattformen downloaden
- click: Für Command-line programs (CLI)
- SQLAlchemy: Falls man was mit SQL machen möchte
- Weitere Ideen
Was unterscheidet eine “gute” von einer “schlechten” Bibliothek?
- Existierende Dokumentation
- mindestens eine API Referenz, Guides und Tutorials aber wünschenswert
- Aktivität
- letzter Bugfix vor 10 Jahren?
- benutzen es mehr als einer Handvoll von Leuten? (GitHub Stars ist eine Indiz)