Zum Inhalt

Eigenheiten & Tricks

Hey! Hier ist eine zusammengestellte Übersicht der hochspezifischen Beispiele, benutzerdefinierten Übungen und Syntax-Nuancen.


1. String-Eigenheiten & knifflige Indexierungsgrenzen

  • Slicing bis ganz zum Ende: Anstatt die standardmäßige kurze Schreibweise str1[1:] zu verwenden, haben wir explizit dokumentiert, die Funktion len() als oberen Grenzwertparameter zu übergeben, um das absolute Ende eines Strings zu garantieren: print(str1[1:len(str)]).
  • Negativ-zu-Positiv-Slices: Ein spezifisches Logikmuster, das verwendet wird, um ein Suffix ausgehend von einem negativen Index relativ zur Gesamtlänge zu isolieren: str[-1:len(str)] und print(marks[-3:-1]).
  • Das "Forever"-Mutationsmuster: Um im Kopf zu behalten, dass String-Methoden neue Strings zurückgeben, anstatt sie direkt vor Ort (in-place) zu verändern, protokollieren wir genau dieses Zuweisungsmuster, um es fest zu verankern: str = str.capitalize() # to capitalize forever.
  • Manuelle Leerzeichen zählen: Achten Sie auf führende oder nachstehende Leerzeichen, wenn Sie String-Metriken auswerten. Beispielsweise ändert ein gezielter String mit einem absichtlichen führenden Leerzeichen die erwartete Anzahl der Elemente: python str2 = " this is my second lecture" # Leading space counts! len2 = len(str2) # Evaluates to 26 instead of 25

2. Granulare Datenstrukturen & Kollektionen

  • Die Ein-Element-Tupel-Falle: Wenn Sie ein einzelnes Element in Klammern setzen, wird es zu einem regulären Primitivtyp, es sei denn, Sie fügen ein nachstehendes Komma hinzu: python tup = (1,) # Comma is mandatory to maintain type integrity!
  • Floats und Ints zusammen in Sets speichern: Sets erzwingen Eindeutigkeit und komprimieren typischerweise Duplikate. Um sowohl eine Ganzzahl als auch deren exakte Fließkommaversion zu speichern, ohne eine Löschung auszulösen, verpacken Sie diese in Tupeln: python values = { ("float", 9.0), ("int", 9) }
  • Multi-Wert-Dictionary-Thesaurus: Ein benutzerdefinierter Mapping-Ansatz, bei dem ein einzelner Suchschlüssel direkt auf eine verschachtelte Liste verweist, die mehrere Definitionen oder Fakten enthält: python dict1 = { "table" : ["a piece of furniture", "list of facts and figures"], "cat": "a small animal" }

3. Benutzerdefinierte Datei-I/O-Logik & Textverarbeitung

  • Manuelles CSV-String-Parsing (ohne .split()): Bevor wir zu integrierten String-Splitting-Funktionen übergehen, haben wir eine Zeichen-für-Zeichen-Iterationsschleife gebaut, die Kommas erfasst, Zahlenpuffer isoliert, sie direkt umwandelt (Type-Casting) und den Puffer sauber leert: python num = "" for i in range(len(data)): if(data[i] == ","): print(int(num)) num = "" else: num += data[i]
  • Die exakte Zeilennummer finden: Anstatt nur zu prüfen, ob ein Wort existiert, liest diese benutzerdefinierte Schleife eine Datei sequentiell Zeile für Zeile und gibt den exakten horizontalen Zeilenindex zurück, an dem der Teilstring erscheint: python def check_line(): word = "learning" data = True line_no = 1 with open("practice.txt", "r") as f: while data: data = f.readline() if word in data: print(line_no) return line_no += 1 return -1
  • Die Überschreibregel (r+ vs w+): Das Öffnen einer Datei im r+-Modus ermöglicht es Ihnen, Zeichen exakt ab Index Null zu überschreiben, ohne den Rest des nachfolgenden Textes automatisch zu löschen (keine automatische Kürzung/Trunkierung).

4. OOP-Architektur, private Attribute & Zustandsänderungen

  • Name Mangling und private Schutzmaßnahmen: Die Verwendung eines doppelten Unterstrichs (__) macht Attribute und Methoden privat, was Fehlermeldungen auslöst, wenn von außen darauf zugegriffen wird, sie bleiben jedoch für interne Methoden offen: ```python class Account: def init(self, account_number, account_password): self.account_number = account_number self.__account_password = account_password # Private attribute

    def reset_password(self):
        print(self.__account_password) # Perfectly safe inside the class block
    

    * **Gezieltes Löschen von Eigenschaften und Instanzen:** Sie können das Schlüsselwort `del` verwenden, um bestimmte Eigenschaften von einem Live-Objekt zu entfernen oder die Objektinstanz vollständig aufzulösen:python del s1.name # Wipe out an individual property del s1 # Liquidate the whole object reference from memory * **3 Wege, eine Klassenvariable zu verändern:** Wenn Sie eine gemeinsam genutzte Klassenstatusvariable ändern (z. B. `name = "anonymous"`), haben wir drei klare Ansätze dokumentiert, um die Änderung über Instanzen hinweg dauerhaft zu machen:python

    Strategy A: Directly targeting the global class blueprint

    Person.name = new_name

    Strategy B: Dynamic query via instance class dunder

    self.class.name = new_name

    Strategy C: Explicit Classmethod Decorator mapping

    @classmethod def change_name(cls, name): cls.name = name ```


5. Dunder-Magie & Objektvergleich

  • Benutzerdefinierte mathematische Vektoren (__sub__): Das Überladen von Operatoren ermöglicht es uns, benutzerdefinierte komplexe Objektzahlen mithilfe von Doppel-Unterstrich-Methoden sauber zu subtrahieren: ```python class complex: def init(self, real, imag): self.real = real self.imag = imag
    def __sub__(self, other):
        newreal = self.real - other.real
        newimag = self.imag - other.imag
        return complex(newreal, newimag)
    

    * **Vergleichen von benutzerdefinierten Objekten (`__gt__`):** Wir können Instanzen basierend auf internen numerischen Werten direkt vergleichbar machen (z. B. um zu bewerten, welche Bestellung teurer ist):python class Order: def init(self, item, price): self.item = item self.price = price

    def __gt__(self, other):
        return self.price > other.price
    

    ```


6. Persönliche Programmier-Eselsbrücken (Mnemonics)

  • Syntax: Regeln richtigherum / Die richtige Art, Code zu schreiben.
  • Einrückung (Indentation): Richtiger Abstand / Freiraum.
  • Konkatenation (Concatenation): Aneinandergehängte Strings.
  • Trunkierung (Truncating): Löscht vorherige Daten und startet die Datei frisch zum Schreiben.