Das Python-Memo-Handbuch – Fähigkeitseinstieg für das gesamte Buch
Auslöser und Nicht-Auslöser
Geeignet: Anfragen und Aufgaben, die mit dem Fähigkeitsbereich dieses Buchs zusammenhängen (siehe Absichtsspalte der Routingtabelle unten). Nicht geeignet:
- Nicht-syntaktische Probleme: Programmarchitektur, Performance-Optimierung, Engineering-Standards, Code-Reviews
- Moderne Engineering-Praktiken (vom Buch nicht abgedeckt): virtuelle Umgebungen, requirements / Abhängigkeitssperren, Typannotationen, with-Kontextmanager, Debugger und Test-Frameworks, Ausnahmeketten und benutzerdefinierte Ausnahmen
- Vollständige Entwicklungstutorials für Drittanbieter-Bibliotheken (wxPython / Pygame / Flask / Crawler-Frameworks – im Buch nur Namens- und Verwendungszweck-Tabellen, keine lauffähigen Programme)
- Teile des Manuskripts mit fehlenden Aufbauzeichnungen: Tabelle der Typkonvertierungsfunktionen (NR-02), open()-Signaturzeile (NR-09), connect()-Aufrufbeispiel (NR-10), start/join von Thread/Process (NR-11), Socket-Erstellung und import (NR-12), re-Aufruffunktionen (NR-13), wx.App und Hauptschleife (NR-14)
Kernprinzipien (ständige Übersicht, Übersichtsfragen können hiermit beantwortet werden)
- Das Wissen des Buchs ist nach dem Dreiklang „Syntaxform + Parameterdetails + Beispielergebnis“ organisiert: Merkt man sich die Form und den Standardwert jedes Parameters, kann man die korrekte Schreibweise ableiten.
- Verzweigungen und Schleifen haben nur zwei Antriebsarten: Bedingung wahr → ausführen, ausgeführt → zurückprüfen (while), oder nacheinander Werte aus einem Objekt holen (for); break verlässt die Schleife, continue überspringt den aktuellen Durchlauf, else kann nicht allein stehen.
- Listen, Tupel, Strings teilen dasselbe Drei-Parameter-Muster für Slicing: inklusive Start, exklusive Ende, und Slicing erzeugt eine neue Sequenz (die ursprüngliche bleibt unverändert).
- Vor dem Sortieren sollte man fragen: „Wird die ursprüngliche Reihenfolge noch benötigt?“ – Wenn ja, sorted (originale Liste bleibt); wenn nein, sort (ändert die Liste direkt).
- Die Aktion nach einem Fehler ist in drei Abschnitte unterteilt: try enthält den möglicherweise fehlerhaften Code, except fängt die angegebene Ausnahme ab und verarbeitet sie, finally enthält Code, der in jedem Fall ausgeführt werden muss; raise wird verwendet, wenn die aktuelle Ebene nicht verarbeitet; assert für Annahmen, die als selbstverständlich gelten.
- Datei- und Datenbankoperationen folgen einer zweistufigen Struktur: „Objekt holen – Methode aufrufen“: open liefert ein Dateiobjekt; connect liefert ein Verbindungsobjekt, dann cursor() ein Cursor-Objekt – SQL wird an den Cursor gesendet, und nach Änderungen muss commit aufgerufen werden.
- Das Manuskript wurde durch OCR beschädigt (Tabellen in Einzelspalten gepresst, runde Klammern zu Buchstaben O, geschweifte zu runden): Zitate werden wörtlich aus dem Original übernommen, keine beschädigten Einträge werden durch gesunden Menschenverstand ergänzt.
Fähigkeitsrouting (Tabelle zuerst lesen, dann 1 Fähigkeitskarte entsprechend der Absicht laden)
| Benutzerabsicht | Zuerst lesen | Ergänzung/Hinweis |
|---|---|---|
| Schreiben von branching-Logik „nur ausführen, wenn Bedingung erfüllt“; Auswahl zwischen while und for; vorzeitiges Beenden oder Überspringen eines Elements in der Schleife (break / continue); else- oder reserviertes Wort verursacht Syntaxfehler – wie beheben; Code einer Schleife analysieren, warum sie nicht läuft; Programm wiederholt nachfragen lassen, bis Bedingung nicht mehr erfüllt (typischer while-Anwendungsfall) | references/capabilities/control-flow-and-loops.md | references/capabilities/operator-precedence.md, references/capabilities/input-and-print.md, references/capabilities/list-comprehension.md, references/capabilities/exception-handling.md |
| Einen Teil einer Sequenz extrahieren (erste paar, mittlerer Abschnitt, jedes n-te); einen Teil eines Strings ausschneiden; Slicing-Ergebnis hat ein Element zu wenig oder zu viel – Grenzen prüfen; bestätigen, ob Slicing die ursprüngliche Liste/den String ändert; x[1:5:2] von anderen verstehen, welche Elemente es extrahiert | references/capabilities/sequence-slicing.md | references/capabilities/list-and-tuple-operations.md, references/capabilities/string-encoding-split-join.md |
| Häufigkeit eines Elements zählen oder dessen Position ermitteln; Elemente einer anderen Liste an die aktuelle anhängen; Liste mit Index durchlaufen; Liste oder Tupel nach Bereich erstellen, leere Liste erzeugen; Summe bilden und dann eine Basis addieren | references/capabilities/list-and-tuple-operations.md | references/capabilities/sequence-slicing.md, references/capabilities/sort-vs-sorted.md, references/capabilities/list-comprehension.md, references/capabilities/dict-and-set-operations.md |
| Liste aufsteigend oder absteigend sortieren; nach dem Sortieren die ursprüngliche Reihenfolge beibehalten; In-Place-Sortierung, kein neues Objekt; nach einem bestimmten Schlüssel sortieren (z. B. case-insensitive); entscheiden, ob Code sort oder sorted verwenden soll | references/capabilities/sort-vs-sorted.md | references/capabilities/list-and-tuple-operations.md, references/capabilities/function-definition-and-call.md |
| In einer Zeile eine neue Liste erzeugen; Listenelemente eins-zu-eins in eine neue Liste abbilden; Elemente aus einer Liste filtern, die eine Bedingung erfüllen; eine schwer verständliche List Comprehension in eine Schleife umwandeln | references/capabilities/list-comprehension.md | references/capabilities/list-and-tuple-operations.md, references/capabilities/control-flow-and-loops.md |
| Dictionary erstellen und nach Schlüssel abfragen; Daten in einem Set deduplizieren; Dictionary durchlaufen und Schlüssel-Wert-Paare abrufen; prüfen, ob ein Typ für Schlüssel oder Set-Elemente geeignet ist; del/pop/remove/clear zur Auswahl für das Löschen von Set-Inhalten | references/capabilities/dict-and-set-operations.md | references/capabilities/list-and-tuple-operations.md |
| Zeichenkodierungsprobleme und inkonsistente Kodierung beheben; String anhand eines Trennzeichens in Felder zerlegen; mehrere Strings zu einem zusammenfügen; Kodierung/Dekodierung tolerant gegenüber ungültigen Zeichen machen | references/capabilities/string-encoding-split-join.md | references/capabilities/sequence-slicing.md, references/capabilities/file-and-directory-operations.md, references/capabilities/string-formatting.md, references/capabilities/regex-construction.md |
| Variable in einen Satz ausgeben; Dezimalstellen kontrollieren; Prozentausgabe; Binär-/Hexadezimaldarstellung ausgeben; zwischen % und format() wählen | references/capabilities/string-formatting.md | references/capabilities/string-encoding-split-join.md, references/capabilities/input-and-print.md |
| Auswertungsreihenfolge und Ergebnis eines Ausdrucks bestimmen; zusammengesetzte Zuweisungen (+= etc.) in erweiterte Form umschreiben; Ergebnis von Vergleichs-/Logikausdrücken als True oder False bestätigen; bestimmen, welche Teile eines Bedingungsausdrucks zuerst ausgewertet werden und ob Klammern nötig sind | references/capabilities/operator-precedence.md | references/capabilities/control-flow-and-loops.md |
| Programm Tastatureingaben des Benutzers empfangen; einen Hinweistext für die Eingabe schreiben; mit print Variable oder Ausdrucksergebnis ausgeben; mit input/print ein minimales Dialoggerüst mit dem Benutzer aufbauen (Bedingungen und Schleifen siehe control-flow-and-loops) | references/capabilities/input-and-print.md | references/capabilities/control-flow-and-loops.md, references/capabilities/string-formatting.md |
| Wiederholten Code in eine Funktion kapseln; Parameter mit Standardwerten definieren; Funktion einen oder mehrere Werte zurückgeben lassen; eine temporäre kleine Funktion mit lambda schreiben; an Stellen, die ein Funktionsobjekt erwarten, eine Funktion übergeben (z. B. key-Parameter bei sort; target bei nebenläufigen Szenarien siehe process-and-thread) | references/capabilities/function-definition-and-call.md | references/capabilities/sort-vs-sorted.md, references/capabilities/exception-handling.md, references/capabilities/class-and-objects.md, references/capabilities/process-and-thread.md |
| Klasse definieren und Instanz erstellen; Instanzmethoden schreiben und self-Position behandeln; mit @property eine berechnete Eigenschaft erstellen; mit Vererbung vorhandene Klasse wiederverwenden und Methode überschreiben | references/capabilities/class-and-objects.md | references/capabilities/function-definition-and-call.md, references/capabilities/gui-window-construction.md |
Bestimmen, ob eine Funktion zur Standardbibliothek gehört oder ein Paket installiert werden muss; import / from…import-Anweisungen schreiben (inkl. Alias und *-Wildcard); Drittanbieter-Module installieren, anzeigen, deinstallieren; ImportError / ModuleNotFoundError beheben | references/capabilities/module-import-and-pip.md | references/capabilities/database-access.md, references/capabilities/socket-communication.md |
| Programm stürzt bei Fehler ab – in kontrollierte Verarbeitung umwandeln; try…except…finally-Dreiteiler schreiben und bestimmen, was in jeden Block kommt; Ausnahme an die aufrufende Ebene weitergeben (raise); mit assert die Annahme offenlegen, dass etwas „selbstverständlich“ gilt; Fehler anhand des Ausnahmenamens (NameError / KeyError / ZeroDivisionError etc.) lokalisieren | references/capabilities/exception-handling.md | references/capabilities/function-definition-and-call.md, references/capabilities/file-and-directory-operations.md, references/capabilities/control-flow-and-loops.md |
| Inhalt in Datei schreiben oder aus Datei lesen; nach Öffnen der Datei nicht schreibbar (Standard read-only); Datei löschen oder umbenennen; Metadaten wie Dateigröße, letzte Änderungszeit prüfen; Unterschied zwischen gleichem Verzeichnis und vollständigem Pfad behandeln | references/capabilities/file-and-directory-operations.md | references/capabilities/exception-handling.md, references/capabilities/string-encoding-split-join.md |
| Daten in Datenbank speichern oder aus Datenbank abfragen; Verbindungsobjekt und Cursor-Objekt unterscheiden, wofür sie jeweils zuständig sind; Daten nach Änderung nicht wirksam – commit vermutet; Abfrageergebnisse abrufen (nächstes / bestimmte Anzahl / alle); connect()-Parameter bestätigen, Treibermodul je nach Datenbanktyp bestimmen (Installation und import des Treibers siehe module-import-and-pip) | references/capabilities/database-access.md | references/capabilities/module-import-and-pip.md |
| Mit Process oder Thread eine Aufgabe starten (Aufruf und Parameter, einschließlich target / args / kwargs – was wohin); bestätigen, ob die Konstruktorparameter von Process und Thread identisch sind; verstehen, was mutex.acquire()/release() tut; bestimmen, was passiert, wenn acquire(blocking=False) das Lock nicht bekommt; gemeinsame Daten schützen, die von mehreren Ausführungseinheiten gelesen/beschrieben werden | references/capabilities/process-and-thread.md | references/capabilities/function-definition-and-call.md |
| Aufruffolge eines TCP-Servers von Bindung bis Datenempfang schreiben; backlog-Wert von listen bestätigen; erklären, warum accept blockiert (blockierendes Warten); Fehler bei Client-Verbindung (socket.error) in welchem Schritt prüfen; Verwendung von recv/send/sendall/recvfrom/sendto klären | references/capabilities/socket-communication.md | references/capabilities/module-import-and-pip.md |
| Ein reguläres Ausdrucksmuster konstruieren; Bedeutung von Metazeichen nachschlagen (Punkt, Backslash w/s/d/b, ^, $); Wiederholungsquantifizierer für eine bestimmte Position auswählen; Flags wie case-insensitive, multiline, dotall auswählen; prüfen, ob ^ und $ auf die gesamte Zeichenkette oder zeilenweise passen | references/capabilities/regex-construction.md | references/capabilities/string-encoding-split-join.md |
| wxPython-Fenster und Steuerelementkonstruktion lesen oder umschreiben; Parameter von wx.Frame und weglassbare Optionen prüfen; style für Eingabefelder wie read-only/Passwort setzen; Sizer-Typ für Steuerelement-Layout auswählen; bestätigen, was parent für Top-Level-Fenster und Steuerelemente ist | references/capabilities/gui-window-construction.md | references/capabilities/class-and-objects.md |
Nicht-Fähigkeitsanfragen:
- Buchtitel/Autor/Kapitel/Gesamtübersicht → references/overview.md
- Begriffserklärung → references/glossary.md
- Entscheidungsregeln Schnellreferenz (wenn kein Manuskriptbezug nötig) → references/cheatsheet.md
- Vollständiger Absichts- und Schlüsselwortindex (nicht in obiger Tabelle abgedeckte Absichten zuerst hier suchen) → references/capability-index.md
Laderegeln
- Jede Aufgabe liest zuerst diese Datei, dann lädt sie gemäß Routingtabelle 1 Fähigkeitskarte; bei klar domänenübergreifenden Aufgaben maximal 2 Karten.
- Übersichts-/Buchtitel-Fragen laden keine Fähigkeitskarten; sie werden mit den Kernprinzipien und overview.md beantwortet.
- Absichten, die weder in der Routingtabelle noch in capability-index.md gefunden werden, werden explizit als außerhalb des Buchumfangs gemeldet, nicht erzwungen.
Grenzen und Abbruchkriterien
- Wenn die Anfrage eine im Manuskript nicht vorhandene „Aufbauzeichnung“ erfordert (siehe letzter Punkt in out_of_scope), wird die Ableitung gestoppt und klar gesagt: „Vom Buch nicht abgedeckt“. Es darf nicht nach gesundem Menschenverstand ergänzt oder in die Schreibweise des Buchs hineinerfunden werden.
- Wenn auf die Abbildung der Typkonvertierungsfunktionstabelle (NR-02, ord()-Zeile Funktionsname durch nächste Zeile überschrieben) verwiesen werden muss, wird das Zitieren der Tabelle gestoppt und die beschädigte Stelle im Manuskript angegeben.
- Wenn der Benutzer ein wortwörtliches Zitat für Druckerzeugnisse, Lehrmaterialien etc. wünscht, wird darauf hingewiesen, dass das Manuskript eine OCR-Bereinigung ist (NR-15: Symbolfehlerkennung, Tabelle in Einzelspalten, zeilenübergreifende Verkettung). Es sollte zuerst eine bessere Vorlage gesucht und die Zitatprüfung erneut durchgeführt werden.