Python



Allgemeine Python-Links

  • Python-Beamter

    Vorteile von Python

    Prägnante und leicht zu erlernende Syntax

    Die Syntax von Python ist einfach und ähnelt der natürlichen Sprache. Selbst unerfahrene Programmierer können schnell loslegen, was die Lernschwelle senkt.

    Umfangreiche Standardbibliothek und Ressourcen von Drittanbietern

    Python bietet eine breite Palette von Standardfunktionsbibliotheken, die viele Aspekte wie Vernetzung, Datenverarbeitung und grafische Schnittstellen abdecken. Darüber hinaus macht das leistungsstarke Ökosystem von Drittanbietern wie NumPy, Pandas und TensorFlow Python zu einem vielseitigen Entwicklungstool.

    Plattformübergreifende Funktionen

    Python ist eine plattformübergreifende Sprache. Unabhängig davon, ob es sich um Windows, macOS oder Linux handelt, kann dasselbe Python-Programm ausgeführt werden, was die Flexibilität der Entwicklung erheblich verbessert.

    In vielen Bereichen weit verbreitet

    Python spielt in mehreren Bereichen wie Datenwissenschaft, künstliche Intelligenz, Webentwicklung, Automatisierungsskripting, Spieleentwicklung usw. eine wichtige Rolle und ermöglicht es Entwicklern, mehrere Anforderungen mit einer Sprache zu erfüllen.

    Aktive Community-Unterstützung

    Python hat eine große globale Community und sowohl Anfänger als auch erfahrene Entwickler können leicht Bildungsressourcen, Diskussionsgruppen und technischen Support finden.

    Effiziente Entwicklungsgeschwindigkeit

    Python bietet eine intuitive Syntax und leistungsstarke Tools, sodass Entwickler die Programmierung schneller implementieren und den Produktentwicklungszyklus verkürzen können.



    Python-Entwicklungsumgebung

    Anaconda

    Was ist Anakonda?

    Anaconda ist eine Open-Source-Python- und R-Programmierplattform, die für wissenschaftliches Rechnen entwickelt wurde, einschließlich Anwendungen wie Datenwissenschaft, maschinelles Lernen, künstliche Intelligenz und Big-Data-Analyse.

    Hauptfunktionen

    Geeignet für Gegenstände

    Anaconda ist für Benutzer in den folgenden Bereichen geeignet:

    Wie installiere ich Anaconda?

    1. ZugangOffizielle Anaconda-Website
    2. Wählen Sie die entsprechende Betriebssystemversion aus und laden Sie die entsprechende Installationsdatei herunter.
    3. Folgen Sie dem Installationsassistenten, um die Installation abzuschließen und Umgebungsvariablen zu konfigurieren (optional).

    FAQ

    Die folgenden Probleme treten bei Benutzern häufig auf:



    Anaconda-Umgebung

    Was ist die Anaconda-Umgebung?

    Anaconda bietet eine Funktion für virtuelle Umgebungen (Umgebung), mit der Benutzer mehrere unabhängige Python-Ausführungsumgebungen auf demselben Computer erstellen können. Jede Umgebung kann unterschiedliche Python-Versionen und -Pakete haben, um Abhängigkeitskonflikte zwischen verschiedenen Projekten zu vermeiden.

    Umgebung schaffen

    # Erstellen Sie eine Umgebung mit dem Namen myenv und geben Sie die Python-Version an
    conda create -n myenv python=3.10

    Umgebungen starten und wechseln

    # Umgebung starten
    Conda aktiviert Myenv
    
    #Verlassen Sie die Umgebung
    Conda deaktivieren

    Umgebung anzeigen

    # Alle Umgebungen auflisten
    Conda-Env-Liste
    # oder
    Conda-Info --envs

    Umgebungen exportieren und wiederherstellen

    # Umgebungskonfiguration in eine YAML-Datei exportieren
    Conda-Env-Export > Environment.yml
    
    # Umgebung aus YAML-Datei erstellen
    conda env create -f ambient.yml

    Umgebung löschen

    # Löschen Sie die angegebene Umgebung
    conda remove -n myenv --all


    Jupyter

    Was ist Jupyter?

    Jupyter ist eine interaktive Open-Source-Computerumgebung, die mehrere Programmiersprachen unterstützt und hauptsächlich für Datenwissenschaft, maschinelles Lernen und akademische Forschung verwendet wird.

  • Jupyter

    Kernfunktionen

    Hauptkomponenten

    Anwendungsbereich

    Jupyter wird häufig in den folgenden Bereichen verwendet:

    Wie verwende ich Jupyter?

    1. Installieren Sie Anaconda oder installieren Sie Jupyter eigenständig.
    2. Geben Sie das Terminal einjupyter notebookStarten Sie Jupyter Notebook.
    3. Rufen Sie die Bearbeitungsoberfläche über den Browser auf, um Notizbücher zu erstellen und auszuführen.

    Vorteile und Herausforderungen



    VS Code Python-Entwicklungsumgebung

    Installieren Sie Visual Studio Code

    Gehe zuOffizielle Website von Visual Studio Code, laden Sie die für Ihr Betriebssystem geeignete Version herunter und installieren Sie sie.

    Installieren Sie die Python-Erweiterung

    Installieren Sie in Visual Studio Code die Python-Erweiterung, indem Sie die folgenden Schritte ausführen:

    1. Klicken Sie links auf das Erweiterungssymbol.
    2. Suchen Sie nach „Python“.
    3. Wählen Sie die von Microsoft bereitgestellte Python-Erweiterung aus und klicken Sie auf „Installieren“.

    Installieren Sie Python

    Stellen Sie sicher, dass Python auf Ihrem System installiert ist. Erhältlich beiOffizielle Python-WebsiteHerunterladen und installieren.

    Geben Sie nach Abschluss der Installation den folgenden Befehl in die Befehlszeile ein, um zu bestätigen, dass die Installation erfolgreich war:

    Python --version
    # oder
    python3 --version

    Einrichten des Python-Interpreters

    Öffnen Sie Ihr Python-Projekt oder Ihre Python-Datei, klicken Sie auf die Statusleiste „Python“ in der unteren rechten Ecke von Visual Studio Code und wählen Sie den entsprechenden Python-Interpreter aus.

    Python-Programm ausführen

    Öffnen Sie die Python-Datei im Editor und führen Sie das Programm mit der folgenden Methode aus:

    1. Klicken Sie mit der rechten Maustaste auf den Dateiinhalt und wählen Sie „Python-Datei im Terminal ausführen“.
    2. Oder verwenden Sie TastenkombinationenCtrl + Shift + P, suchen Sie nach „Run Python File“ und führen Sie es aus.

    Installieren Sie die erforderlichen Pakete

    Wenn Sie ein Paket eines Drittanbieters installieren müssen, können Sie über das integrierte Terminal Folgendes eingeben:

    Name des pip-Installationspakets

    Aktivieren Sie die automatische Vervollständigung und das Debuggen

    Profitieren Sie von der automatischen Vervollständigung und leistungsstarken Debugging-Tools durch die von Python-Erweiterungen bereitgestellten Funktionen:

    1. Klicken Sie links auf das Debug-Symbol.
    2. Wählen Sie „Eine launch.json-Datei erstellen“ und wählen Sie Python.
    3. Nachdem die Einstellungen abgeschlossen sind, drücken Sie F5, um den Debug-Modus zu aktivieren.

    Häufig verwendete Tastenkombinationen

    Hier sind einige häufig verwendete Tastenkombinationen:



    VS Code

  • vscode/Vidual Studio Code

    VS Code legt Python-Ausführungsparameter fest

    Ändern Sie launch.json

    Wenn Sie beim Ausführen eines Python-Programms Parameter übergeben müssen, können Sie diese festlegenlaunch.jsonBeenden:

    1. Klicken Sie links auf das Symbol „Ausführen und Debuggen“.
    2. Klicken Sie auf „Eine launch.json-Datei erstellen“ oder „Konfiguration hinzufügen“.
    3. Wählen Sie als Umgebung „Python“.
    4. in generiertlaunch.jsonÄndern Sie relevante Einstellungen in der Datei.

    Legen Sie Programm- und Argumentparameter fest

    Das Folgende ist eine Beispielkonfiguration, einschließlich des Programmpfads und der Ausführungsparameter:

    {
        „Version“: „0.2.0“,
        „Konfigurationen“: [
            {
                „name“: „Python: Mit Argumenten ausführen“,
                „Typ“: „Python“,
                „request“: „launch“,
                „program“: „${workspaceFolder}/main.py“, // Programmpfad
                „console“: „integratedTerminal“, // Terminaltyp
                "args": ["arg1", "arg2", "--option", "value"] // Parameter übergeben
            }
        ]
    }

    Der Zweck von args

    existierenargsEs können Befehlszeilenparameter übergeben werden, zum Beispiel:

    Parameter im Programm lesen

    verwendensys.argvSo lesen Sie die über die Befehlszeile übergebenen Parameter:

    importsys
    
    print("Alle Parameter:", sys.argv)
    wenn len(sys.argv) > 1:
        print("Erster Parameter:", sys.argv[1])
        print("Zweiter Parameter:", sys.argv[2])

    Ausführungsbeispiel

    Angenommen, das Programm ist:

    python main.py arg1 arg2 --option value

    Ausführungsergebnis:

    Alle Parameter: ['main.py', 'arg1', 'arg2', '--option', 'value']
    Erster Parameter: arg1
    Zweiter Parameter: arg2


    VS Code Python-Debug-Modus

    Aktivieren Sie den Debug-Modus

    1. InstallationPython ExtensionVerlängerung.

    2. Starten Sie Ihr Python-Projekt in VS Code.

    3. Drücken SieF5Oder klicken Sie links auf die AktivitätsleisteDebugSymbol.

    launch.json einstellen

    1. Klicken Sie im Debug-Panel auf „Konfiguration hinzufügen“.

    2. Wählen SiePython, das System generiert automatisch einelaunch.json

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python: Current File",
                "type": "python",
                "request": "launch",
                "program": "${file}",
                "console": "integratedTerminal"
            }
        ]
    }
    

    Haltepunkt setzen

    1. Klicken Sie auf neben der Codezeilennummer, um einen Haltepunkt hinzuzufügen.

    2. Bedingte Haltepunkte können verwendet werden: Klicken Sie mit der rechten Maustaste auf den Haltepunkt und wählen Sie „Bedingung bearbeiten“.

    Debugging-Funktion

    Variablen prüfen

    1. Sehen Sie sich den aktuellen Variablenstatus im Bereich „Variablen“ des Debug-Panels an.

    2. Im Bereich „Monitor“ können Sie bestimmte Ausdrücke manuell hinzufügen.

    Verwenden der Debug-Konsole

    1. Geben Sie Python-Befehle in die Debug-Konsole ein, um den Programmstatus in Echtzeit zu überprüfen.

    2. Kann Operationen wie Variablenabfragen und Funktionsaufrufe ausführen.



    VS Code legt den Python-Pfad fest

    Schritt 1: Installieren Sie Python und VS-Code

    Stellen Sie sicher, dass Python installiert und zu Ihren Systemumgebungsvariablen hinzugefügt ist, laden Sie dann Visual Studio Code herunter und installieren Sie es.

    Schritt 2: Installieren Sie die Python-Erweiterung

    Öffnen Sie Visual Studio Code, klicken Sie links auf das Erweiterungssymbol und suchen SiePython, und installieren Sie dann die von Microsoft bereitgestellten Python-Erweiterungen.

    Schritt 3: Überprüfen Sie den Python-Installationspfad

    Geben Sie im Terminal den folgenden Befehl ein, um den Installationspfad von Python zu bestätigen:

    which python

    Oder (Windows-System):

    where python

    Schritt 4: Legen Sie den Python-Pfad fest

    Drücken Sie in Visual Studio CodeCtrl + Shift + P, eingeben und auswählenPython: Select Interpreter

    Wählen Sie im Manifest den richtigen Python-Pfad aus. Wenn es nicht angezeigt wird, geben Sie den vollständigen Pfad manuell ein.

    Schritt 5: Bestätigen Sie die Einstellungen

    Öffnen Sie das Terminal und führen Sie es auspython --versionum zu bestätigen, dass die richtige Version des Python-Interpreters ausgewählt ist.

    Weitere Informationen

    Wenn Sie den Python-Pfad eines bestimmten Projekts benötigen, können Sie ihn im Projektstammverzeichnis hinzufügen.vscode/settings.jsonDatei und fügen Sie den folgenden Inhalt hinzu:

    {
      „python.pythonPath“: „Ihr vollständiger Pfad zu Python“
    }

    ersetzenIhr vollständiger Python-Pfadist der eigentliche Pfad.



    Umschalten der VS Code Python-Umgebung

    Bei der Entwicklung in VS-Code entscheide ich mich für die Verwendung von Anaconda oder anderen Umgebungen, hauptsächlich aufgrund der zugrunde liegenden Interpreter-Einstellungen (Interpreter). Dadurch wird sichergestellt, dass Ihre Paketabhängigkeiten vollständig von der Programmausführungsumgebung isoliert sind.


    1. Schritte zur Auswahl einer Python-Umgebung


    2. Wie Sie sich für die Verwendung von Anaconda oder anderen Umgebungen entscheiden

    Umgebungstyp Anwendbare Situationen Hauptvorteile
    Anaconda Datenwissenschaft, maschinelles Lernen, Deep Learning Es ist mit einer großen Anzahl wissenschaftlicher Computerbibliotheken vorinstalliert und verfügt über eine leistungsstarke Verwaltung der zugrunde liegenden Binärdateien (z. B. DLL).
    Venv Allgemeine Webentwicklung, Automatisierungsskripte Leicht, schnell zu starten und enthält nur die für die Ausführung erforderlichen Pakete.

    3. Umgebungen in Conda verwalten und wechseln

    Zusätzlich zur grafischen Oberfläche können Sie auch Befehle im integrierten Terminal von VS Code verwenden, um die Umgebung zu verwalten:


    4. Häufig gestellte Fragen und Lösungen



    Führen Sie Python auf Ihrem Chromebook aus

    Methode 1: Verwendung von Linux (Crostini)

    1. Aktivieren Sie „Linux (Beta)“ oder „Entwickler → Linux-Entwicklungsumgebung“ in den Chromebook-Einstellungen.
    2. Starten Sie ein Linux-Terminal und geben Sie Folgendes ein:
      
      sudo apt update
      sudo apt install python3 python3-pip -y
          
    3. eingebenpython3Betreten Sie die interaktive Python-Umgebung.
    4. Zur Installation zusätzlicher Module verfügbarpip3-Installationsmodulname

    Methode 2: Verwenden Sie einen Online-Compiler

    Methode 3: Android-App installieren

    Methode 4: Verwenden Sie VS-Code

    1. Installieren Sie VS-Code in einer Linux-Umgebung (Crostini):
      
      sudo apt install wget gpg -y
      wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
      sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
      sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] \
      https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
      sudo apt update
      sudo apt install code -y
          
    2. Installieren Sie das Python-Plug-in in VS Code, um Programme zu entwickeln.

    abschließend



    Leitfaden zur Pip-Nutzung

    1. Was ist Pip?

    2. Grundoperationen von Pip

    3. Erweiterte Funktionen

    4. Häufig gestellte Fragen und Lösungen

    5. Best Practices für Pip



    pip/cache/http-v2-Ordner

    1. Was ist der Ordner pip/cache/http-v2?

    2. Zweck des http-v2-Ordners

    3. Verwaltung von http-v2-Ordnern

    4. Vorsichtsmaßnahmen



    Grundlegende Datenstruktur von Python

    Variablentyp prüfen

    Verwenden Sie type()

    type()Die Funktion kann den Typ des Objekts zurückgeben.

    
    x = 10
    print(type(x))   # <class 'int'>
    
    y = "hello"
    print(type(y))   # <class 'str'>
    

    Verwenden Sie isinstance()

    isinstance()Wird verwendet, um zu prüfen, ob eine Variable zu einem bestimmten Typ gehört, und unterstützt die Prüfung mehrerer Typen.

    
    x = 10
    
    print(isinstance(x, int))         # True
    print(isinstance(x, str))         # False
    print(isinstance(x, (int, float))) # True
    

    Unterschied



    Boolescher Python-Datentyp

    Boolean ist in Python der grundlegende Datentyp in der Programmierung, der zwei logische Zustände darstellt: Wahr oder Falsch. Es ist die Grundlage für alle bedingten Urteile und Prozesskontrollen.

    1. Boolesche Werte und Typen

    a = Wahr
    b = Falsch
    print(type(a)) # Ausgabe: <class 'bool'>

    2. Die Beziehung zwischen Bollinger und Zahlen

    In Python,boolist eine ganze ZahlintUnterkategorien von , damit sie an numerischen Operationen teilnehmen können:

    print(True + 1) # Ausgabe: 2 (1 + 1)
    print(False * 5) # Ausgabe: 0 (0 * 5)

    3. Kernverwendung: Vergleichsoperator

    Vergleichsoperatoren vergleichen zwei Werte und geben ein boolesches Ergebnis zurück.

    Operator beschreiben Beispiel Ergebnis
    == gleich 10 == 10 True
    != nicht gleich 5 != 10 True
    > größer als 10 > 5 True
    <= kleiner oder gleich 5 <= 5 True

    4. Logische Operatoren

    Logische Operatoren werden verwendet, um boolesche Werte oder boolesche Ausdrücke zu kombinieren oder zu ändern.

    print(True and False) # Ausgabe: False
    print(True or False) # Ausgabe: True
    print(not True) # Ausgabe: False

    5. Wahrheitswertprüfung

    In Python haben alle Objekte einen Wahrheitswert. Wenn ein Objekt zur bedingten Beurteilung verwendet wird, konvertiert Python es inTrueoderFalse

    if []: # Leere Listen werden als False behandelt
        print("Dies wird nicht ausgeführt")
    sonst:
        print("Die Liste ist leer")
    
    if "hello": # Nicht leere Zeichenfolgen werden als wahr betrachtet
        print("String ist nicht leer")


    Python-Array

    Was ist ein Array?

    In Python ist ein Array eine Datenstruktur, die zum Speichern mehrerer Elemente desselben Typs verwendet wird. Obwohl Python selbst keinen integrierten Array-Typ hat, können Sie ihn verwendenlistoderarrayModule zur Erzielung ähnlicher Funktionalität.

    Verwenden Sie die Liste als Array

    listEs handelt sich um die in Python integrierte Datenstruktur, die viele Datentypen speichern kann, aber auch zum Simulieren von Arrays verwendet werden kann.

    my_list = [1, 2, 3, 4, 5]
    print(my_list[0]) # Ausgabe: 1

    Verwendung des Array-Moduls

    Wenn Sie ein echtes Array benötigen (alle Elemente müssen vom gleichen Typ sein), können Sie es verwendenarrayMods.

    Array importieren
    
    my_array = array.array('i', [1, 2, 3, 4, 5])
    print(my_array[0]) # Ausgabe: 1

    Hier,'i'Gibt an, dass die Elemente im Array ganze Zahlen sind.

    Grundfunktionen des Array-Moduls

    Hier sind einige grundlegende Operationen:

    Arrays und NumPy

    Für Situationen, in denen numerische Operationen erforderlich sind,numpyBietet eine leistungsfähigere Array-Unterstützung.

    numpy als np importieren
    
    my_numpy_array = np.array([1, 2, 3, 4, 5])
    print(my_numpy_array[0]) # Ausgabe: 1

    NumPy-Arrays unterstützen mehrdimensionale Daten und vektorisierte Operationen und eignen sich daher ideal für die Verarbeitung großer Datenmengen.

    abschließend

    Python bietet viele Möglichkeiten, Array-Funktionen zu implementieren.listAnwendbar auf allgemeine Situationen,arrayModule eignen sich für Situationen, in denen dieselbe Art von Elementen erforderlich istnumpyEs ist das Werkzeug der Wahl für wissenschaftliches Rechnen.



    Stellen Sie fest, ob die Liste leer ist

    für Variablenret_value = []gibt es mehrere einfache und effiziente Möglichkeiten, um festzustellen, ob es sich in der Python-Sprache um eine leere Liste handelt. Da eine leere Liste behandelt wird alsFalseIm Folgenden sind einige häufig verwendete Beurteilungsmethoden aufgeführt.

    1. Verwenden Sie die boolesche Auswertung (die am meisten empfohlene Pythonic-Methode).

    Dies ist die beliebteste Methode, bei der der boolesche Wert einer Liste direkt überprüft wird. Wenn die Liste leer ist,notDer Operator sorgt dafür, dass seine Bedingung als wahr ausgewertet wird (True)。

    ret_value = []
    
    wenn nicht ret_value:
        #Hier ausführen, wenn die Liste leer ist
        print("ret_value ist eine leere Liste")
    sonst:
        #Hier ausführen, wenn die Liste nicht leer ist
        print("ret_value ist keine leere Liste")

    2. Verwendunglen()Funktion

    Prüft, ob die Länge der Liste gleich 0 ist.

    ret_value = []
    
    wenn len(ret_value) == 0:
        print("ret_value ist eine leere Liste")
    sonst:
        print("ret_value ist keine leere Liste")

    3. Verwenden Sie äquivalente Vergleiche== []

    Weisen Sie Variablen direkt einem leeren Listenliteral zu[]Machen Sie einen Vergleich.

    ret_value = []
    
    wenn ret_value == []:
        print("ret_value ist eine leere Liste")
    sonst:
        print("ret_value ist keine leere Liste")


    Dynamische Vergrößerung und Verkleinerung des Arrays

    Verwenden von Listen für dynamische Operationen

    In Python,listEs handelt sich um eine dynamische Datenstruktur, mit der Elemente einfach hinzugefügt und entfernt werden können.

    Neues Element hinzufügen

    Neue Elemente können mit den folgenden Methoden hinzugefügt werden:

    # Beispiel für neues Element
    meine_liste = [1, 2, 3]
    my_list.append(4) # [1, 2, 3, 4]
    my_list.insert(1, 10) # [1, 10, 2, 3, 4]
    my_list.extend([5, 6]) # [1, 10, 2, 3, 4, 5, 6]

    Element entfernen

    Elemente können entfernt werden mit:

    # Beispiel für Element entfernen
    my_list = [1, 2, 3, 4, 5]
    my_list.pop() # [1, 2, 3, 4]
    my_list.remove(2) # [1, 3, 4]
    my_list.clear() # []

    Dynamische Operationen mit dem Array-Modul

    In Fällen, in denen Sie Elemente desselben Typs benötigen, können Sie verwendenarrayMods.

    Neues Element hinzufügen

    append()Undextend()Methode gilt fürarrayMods.

    import array
    my_array = array.array('i', [1, 2, 3])
    my_array.append(4)  # [1, 2, 3, 4]
    my_array.extend([5, 6])  # [1, 2, 3, 4, 5, 6]
    

    Element entfernen

    remove()Undpop()Methoden können eingesetzt werdenarrayMods.

    # Beispiel für Element entfernen
    my_array = array.array('i', [1, 2, 3, 4])
    my_array.remove(2) # [1, 3, 4]
    my_array.pop() # [1, 3]

    abschließend

    Python bietet eine Vielzahl von Methoden zum dynamischen Erhöhen und Verkleinern von Arrays.listUndarrayDie Module sind für unterschiedliche Bedürfnisse geeignet. Für funktionale Anforderungen können Sie auch die Verwendung in Betracht ziehennumpy



    Zählen von Python-Arrays

    In Python,list.count()Es handelt sich um ein Tool, das speziell für Statistiken verwendet wirdDie Anzahl der Vorkommen eines bestimmten ElementsVerfahren. Es ist dasselbe, als würde man die Länge der Liste ermittelnlen()Im Gegensatz dazu muss ein Parameter als Vergleichsobjekt übergeben werden.


    1. Grundlegende Syntax von list.count()

    Die Syntax istlist.count(value), die die Ganzzahl zurückgibt, wie oft der Wert in der Liste erscheint. Wenn der Wert nicht existiert, wird 0 zurückgegeben.

    Früchte = ['Apfel', 'Banane', 'Apfel', 'Orange', 'Apfel']
    
    # Zählen Sie die Anzahl der Vorkommen von „apple“
    apple_count = Fruits.count('apple')
    print(apple_count) # Ausgabe: 3
    
    # Nicht vorhandene Elemente zählen
    Grape_count = Fruits.count('Grape')
    print(grape_count) # Ausgabe: 0

    2. Vergleich gängiger Zählanforderungen und -tools

    Abhängig von Ihren Anforderungen (ob Sie ein einzelnes Element, mehrere Elemente oder alle Statistiken suchen) gibt es unterschiedliche Best Practices:

    brauchen Empfohlene Methode Beispielcode
    Zählen Sie ein einzelnes spezifisches Element list.count() arr.count(10)
    Ermitteln Sie die Gesamtlänge der Liste len() len(arr)
    Zählen Sie die Häufigkeit aller Elemente collections.Counter Counter(arr)
    Bedingungsanzahl (wenn größer als 5) Generatorausdruck sum(1 for x in arr if x > 5)

    3. Erweiterte Tools: Sammlungen.Zähler

    Wenn Sie wissen möchten, wie oft „alle Elemente“ gleichzeitig in der Liste erscheinen, verwenden SieCounterWird viele Male laufencount()Viel effizienter (O(n) vs. O(n^2)).

    aus Sammlungen importieren Counter
    
    Daten = [1, 2, 2, 3, 3, 3, 4]
    counts = Zähler(Daten)
    
    print(counts) # Ausgabe: Counter({3: 3, 2: 2, 1: 1, 4: 1})
    print(counts[3]) # Ermitteln Sie die Häufigkeit 3: 3
    print(counts.most_common(1)) # Holen Sie sich das Element mit den meisten Vorkommen

    4. Leicht verwirrende Nutzungserinnerungen


    5. Praktische Fertigkeiten: bedingtes Zählen

    Wenn Sie die Anzahl der Elemente zählen möchten, die einer bestimmten Logik entsprechen (z. B. eine Zeichenfolge mit einer Länge von mehr als 3), können Sie kombinierensum()

    Wörter = ['hi', 'hello', 'python', 'a', 'code']
    
    # Zählen Sie die Anzahl der Wörter mit einer Länge > 3
    big_word_count = sum(1 für w in Worten, wenn len(w) > 3)
    print(big_word_count) # Ausgabe: 3


    2D-Listen zusammenführen

    Anforderungsbeschreibung

    Beispielprogramm

    list1 = [
        ["a", 1],
        ["b", 2],
        ["c", 3]
    ]
    
    list2 = [
        ["c", 30],
        ["a", 10],
        ["d", 40]
    ]
    
    #Liste1 in Diktat umwandeln
    dict1 = {k: v für k, v in list1}
    dict2 = {k: v für k, v in list2}
    
    # Alle Schlüssel finden
    all_keys = sortiert(set(dict1.keys()) | set(dict2.keys()))
    
    # Ergebnisse zusammenführen
    zusammengeführt = []
    für k in all_keys:
        v1 = dict1.get(k)
        v2 = dict2.get(k)
        merged.append([k, v1, v2])
    
    für Zeile in zusammengeführt:
        drucken(Zeile)

    Ergebnisse ausgeben

    
    ['a', 1, 10]
    ['b', 2, None]
    ['c', 3, 30]
    ['d', None, 40]
    

    abschließend



    Führen Sie eine Schleife mit zwei Listen gleichzeitig durch

    Wenn Sie in Python zwei Listen haben (z. B.selected_fields_listUndaSqlValuesStr_list) und müssen gleichzeitig über sie iterieren. Die gebräuchlichste und pythonische Methode ist die Verwendung der integriertenzip()Funktion.

    1. Verwenden Sie die Funktion zip()

    zip()Die Funktion packt mehrere iterierbare Objekte (Iterable) in eine Folge von Tupeln. Bei jeder Iteration der Schleife wird das Element an der entsprechenden Position aus jeder Liste entfernt.

    Import bzgl
    
    # Angenommen, dies sind die beiden Listen, die Sie nach re.split() erhalten
    selected_fields = "Name, Alter, Stadt"
    aSqlValuesStr = "Alice,25,Taipei"
    
    selected_fields_list = re.split(r',', selected_fields)
    aSqlValuesStr_list = re.split(r',', aSqlValuesStr)
    
    # For-Schleife ausführen
    für Feld, Wert in zip(selected_fields_list, aSqlValuesStr_list):
        print(f"Feld: {field}, Wert: {value}")

    2. Beispielausgabe

    Feld: Name, Wert: Alice
    Feld: Alter, Wert: 25
    Feld: Stadt, Wert: Taipei

    3. Wichtige Hinweise zu zip()

    Wenn Sie verwendenzip()Bei der Verwendung von Funktionen müssen Sie auf folgende Punkte achten:

    #Beispiel: Listenlängen sind inkonsistent
    list1 = [1, 2, 3]
    list2 = ['a', 'b']
    
    für Artikel1, Artikel2 in zip(list1, list2):
        print(item1, item2)
    #Die Ausgabe wird nur sein:
    # 1a
    #2b


    Anzeige des 2D-Arrays ausrichten

    Richten Sie Felder mithilfe des Formats aus

    Daten = [
        [1, 23, 456],
        [7890, 12, 3],
        [45, 678, 9]
    ]
    
    # Berechnen Sie die maximale Breite jeder Spalte
    col_widths = [max(len(str(row[i])) for row in data) for i in range(len(data[0]))]
    
    # Ausgabe formatieren
    für Zeile in Daten:
        print(" ".join(str(val).rjust(col_widths[i]) for i, val in enumerate(row)))

    Ergebnisse ausgeben

    
       1   23  456
    7890   12    3
      45  678    9
    

    Verwendung des Tabulatormoduls

    Pakete von DrittanbieterntabulateAusgerichtete Tabellen können direkt ausgegeben werden.

    
    from tabulate import tabulate
    
    data = [
        [1, 23, 456],
        [7890, 12, 3],
        [45, 678, 9]
    ]
    
    print(tabulate(data, tablefmt="grid"))
    

    Ergebnisse ausgeben

    
    +------+-----+-----+
    |    1 |  23 | 456 |
    | 7890 |  12 |   3 |
    |   45 | 678 |   9 |
    +------+-----+-----+
    

    abschließend



    Ausgerichtete Ausgabe von zweidimensionalen Array-Gleitkommazahlen

    veranschaulichen

    Das folgende Beispiel zeigt, wie eine zweidimensionale Liste gedruckt wird. Wenn das Element istfloatDie Anzeige von zwei Dezimalstellen wurde korrigiert. Andere Elemente werden unverändert ausgegeben, wobei die Feldausrichtung beibehalten wird.

    Programmbeispiel

    Daten = [
        [1, 23.456, 456],
        [7890.1, 12, 3.5],
        [45, 678,9, 9]
    ]
    
    # Formatieren Sie jede Elementzeichenfolge
    formatted_data = []
    für Zeile in Daten:
        new_row = []
        für val in Zeile:
            if isinstance(val, float):
                s = f"{val:.2f}" # float -> zwei Dezimalstellen
            sonst:
                s = str(val)
            new_row.append(s)
        formatted_data.append(new_row)
    
    # Berechnen Sie die maximale Breite jeder Spalte
    col_widths = [max(len(row[i]) for row in formatted_data) for i in range(len(formatted_data[0]))]
    
    # Ausgabe formatieren
    für Zeile in formatted_data:
        print(" ".join(val.rjust(col_widths[i]) for i, val in enumerate(row)))

    Ergebnisse ausgeben

    
        1  23.46  456
    7890.10     12  3.50
       45  678.90     9
    

    Fokus



    Extrahieren Sie alle Werte aus der Wörterbuchliste

    Die von Ihnen bereitgestellte Datenstruktur ist eine Liste mit mehreren Wörterbüchern, wobei jedes Wörterbuch einen Zeitreihendatensatz darstellt (z. B. K-Linien-Daten).

    data = [
        {'time': 1759028400000, 'open': '109398.3', 'close': '109364.8', 'high': '109489.2', 'low': '109364.8', 'volume': '518.7594'},
        {'time': 1759024800000, 'open': '109305.6', 'close': '109398.3', 'high': '109496.4', 'low': '109296.0', 'volume': '757.0290'},
        # ...
    ]

    Wenn Sie alle Werte in allen Datensätzen erhalten möchten (1759028400000, '109398.3', '109364.8'usw.) und sammeln Sie sie in einer Liste. Sie können Nested List Comprehension verwenden.

    1. Extrahieren Sie alle Werte in eine einzige Liste (Abflachung).

    Verwenden Sie ein zweistufiges Listenverständnis, um jedes Wörterbuch in der Liste zu durchlaufen und dann aufzurufen.values()Die Methode ruft die Werte ab und sammelt schließlich alle Werte in einer flachen Liste.

    Daten = [
        {'time': 1759028400000, 'open': '109398.3', 'close': '109364.8', 'high': '109489.2', 'low': '109364.8', 'volume': '518.7594'},
        {'time': 1759024800000, 'open': '109305.6', 'close': '109398.3', 'high': '109496.4', 'low': '109296.0', 'volume': '757.0290'}
    ]
    
    all_values = [
        Wert
        für Datensatz in Daten # Durchlaufen Sie jeden Wörterbuchdatensatz in der externen Liste
        for value in record.values() # Alle Werte im Wörterbuchdatensatz durchlaufen
    ]
    
    print(all_values)

    2. Ergebnisse ausgeben

    Dies führt zu einer einzelnen Liste mit allen Werten:

    [1759028400000, '109398.3', '109364.8', '109489.2', '109364.8', '518.7594', 1759024800000, '109305.6', '109398.3', '109496.4', '109296.0', '757.0290']

    3. Extrahieren Sie den Wert eines bestimmten Feldes

    Wenn Sie nur bestimmte Felder extrahieren müssen (z. B. nur alleopenPreis), können Sie ein einstufiges Listenverständnis verwenden:

    data = [
        {'time': 1759028400000, 'open': '109398.3', ...},
        {'time': 1759024800000, 'open': '109305.6', ...}
    ]
    
    open_prices = [record['open'] for record in data]
    
    print(open_prices)

    Ausgabeergebnis:

    ['109398.3', '109305.6']


    Extrahieren Sie den Wert eines bestimmten Schlüssels aus einer Wörterbuchliste

    1. Verwenden Sie Listenverständnis (empfohlen) ✅

    Listenverständnisse sind eine prägnante, einzeilige Syntax zum Erstellen neuer Listen aus vorhandenen Listen.

    Beispiele für Python-Implementierungen

    from datetime import datetime
    
    data_list = [
        {'videoid': 'b5HxsaM_E2Y', 'publishedat': datetime(2025, 12, 7, 3, 0, 53), 'rankno': 7, 'viewcount': 913053, 'query': 'baseball'},
        {'videoid': 'FEbMCBxsoWI', 'publishedat': datetime(2025, 11, 25, 5, 28, 6), 'rankno': 13, 'viewcount': 754598, 'query': 'baseball'},
        {'videoid': 'nOJUI0PGB68', 'publishedat': datetime(2025, 12, 7, 3, 7, 46), 'rankno': 14, 'viewcount': 748349, 'query': 'baseball'},
        {'videoid': 'uMHXIudw_w0', 'publishedat': datetime(2025, 12, 2, 10, 1, 38), 'rankno': 8, 'viewcount': 687949, 'query': 'baseball'}
    ]
    
    target_key = 'videoid'
    
    # Verwenden Sie das Listenverständnis: Nehmen Sie für jedes Wörterbuchelement in der Datenliste das Element [Zielschlüssel] heraus.
    video_ids = [item[target_key] für Element in data_list]
    
    print(f"Extrahierter Schlüssel: {target_key}")
    print("Alle Video-ID-Werte:")
    print(video_ids)

    Ergebnisse ausgeben

    ['b5HxsaM_E2Y', 'FEbMCBxsoWI', 'nOJUI0PGB68', 'uMHXIudw_w0']

    2. Behandeln Sie die Situation, in der der Schlüssel möglicherweise nicht vorhanden ist (sicherer Zugang).

    Wenn einigen Wörterbüchern in der Liste möglicherweise der Zielschlüssel fehlt (z. B. einige Wörterbücher haben nicht den Schlüssel „videoid“), führt die direkte Verwendung von „item[target_key]“ zu einem „KeyError“-Fehler. Sie können die Methode „.get()“ des Wörterbuchs oder eine Bedingung verwenden, um sicher damit umzugehen.

    Beispiel für eine Python-Implementierung (sicherer Zugriff)

    data_with_missing_key = [
        {'videoid': 'A1', 'query': 'football'},
        {'query': 'basketball'}, # Fehlender 'videoid'-Schlüssel
        {'videoid': 'C3', 'query': 'Volleyball'}
    ]
    
    target_key = 'videoid'
    
    # Option A: Verwenden Sie .get(), um den Standardwert auf None (oder einen anderen Wert) zu setzen.
    safe_video_ids_A = [item.get(target_key) für Element in data_with_missing_key]
    # Ausgabe: ['A1', Keine, 'C3']
    
    # Option B: Nur Werte mit diesem Schlüssel extrahieren
    safe_video_ids_B = [item[target_key] für Element in data_with_missing_key, wenn target_key in Element]
    # Ausgabe: ['A1', 'C3']
    
    print(f"\nSichere Extraktionsergebnisse (Plan B): {safe_video_ids_B}")


    Konvertieren Sie Diktatwerte in eine Liste

    Sie ausonesymbollist.values()Das erhaltene Ergebnis ist ein Python-Wörterbuchansichtsobjektdict_values. Obwohl es wie eine Liste aussieht, handelt es sich um eine dynamische Ansicht und nicht um eine Standardliste, die indiziert oder geändert werden kann.

    dict_values([1763510400000, '0.00015218', '0.00015336', '0.00015415', '0.00015067', '1634523'])

    Nicht anzeigendict_values()Um den Inhalt eines Tags abzurufen, ist die Verwendung des integrierten Tags die einfachste und gebräuchlichste Methodelist()Die Funktion wandelt es in eine Liste um.

    1. In Liste konvertieren (Liste)

    Willedict_valuesweitergegebenlist()Funktion, die alle Elemente im Ansichtsobjekt sofort in eine neue Standardliste kopiert.

    # Angenommen, dies ist das dict_values-Ansichtsobjekt, das Sie erhalten haben
    dict_values_object = your_dictionary.values() # Angenommen, onesymbollist ist ein Wörterbuch
    
    # Schritt: Verwenden Sie zum Konvertieren die Funktion list()
    result_list = list(dict_values_object)
    
    print(result_list)

    Ergebnisse ausgeben

    [1763510400000, '0.00015218', '0.00015336', '0.00015415', '0.00015067', '1634523']

    2. In Tupel konvertieren

    Wenn Ihr Ziel darin besteht, eine unveränderliche Sequenz zu erstellen, können Sie Folgendes verwendentuple()Die Funktion wandelt es in ein Tupel um.

    result_tuple = tuple(dict_values_object)
    
    print(result_tuple)

    Ergebnisse ausgeben

    (1763510400000, '0.00015218', '0.00015336', '0.00015415', '0.00015067', '1634523')

    3. Direkte Iteration (keine Konvertierung erforderlich)

    Beachten Sie, dass Sie die Werte nicht explizit in eine Liste konvertieren müssen, wenn Sie die Werte nur einzeln in einer Schleife verarbeiten möchten.dict_valuesSelbst ist ein iterierbares Objekt (Iterable).

    # Angenommen, dies ist das dict_values-Ansichtsobjekt, das Sie erhalten haben
    dict_values_object = your_dictionary.values()
    
    print("Elemente einzeln ausgeben:")
    für Wert in dict_values_object:
        print(Wert)

    Zusammenfassend: Verwendunglist(your_dict.values())ist die gebräuchlichste Methode, um eine saubere, umsetzbare Werteliste zu erhalten.



    Konvertieren Sie Wörterbuchwerte in durch Kommas getrennte Zeichenfolgen

    beginnendict_valuesExtrahiert alle Werte aus dem Ansichtsobjekt und kombiniert sie in einer einzigen Zeichenfolge, die nur durch Kommas und Leerzeichen getrennt ist (zum Beispiel:1763510400000, '0.00015218', ...), müssen Sie die folgenden Schritte kombinieren:

    1. aus dem Wörterbuch holendict_valuesObjekt ansehen.
    2. Konvertiert alle Elemente in diesem Ansichtsobjekt in String-Typen.
    3. Verwendung von Python", ".join()Methode zum Verketten dieser Zeichenfolgen.

    1. Python-Implementierung

    Angenommen, Ihr ursprüngliches Wörterbuch trägt einen Namenonesymbol_dict, und Sie müssen Nicht-String-Werte (z. B. Zeitstempel) in zu verwendende Strings konvertieren.join()Stellen Sie eine Verbindung her.

    onesymbol_dict = {
        'Zeit': 1763510400000,
        'offen': '0.00015218',
        'schließen': '0.00015336',
        'hoch': '0,00015415',
        'niedrig': '0,00015067',
        'Volume': '1634523'
    }
    
    # Schritt 1 & 2: Werte abrufen und alle Werte in Zeichenfolgen konvertieren
    # Verwenden Sie Listenverständnisse, um sicherzustellen, dass alle Elemente Zeichenfolgen sind
    Values_as_strings = [str(v) für v in onesymbol_dict.values()]
    
    # Schritt 3: Verwenden Sie ', '.join(), um diese Zeichenfolgen zu verbinden
    value_string = ", ".join(values_as_strings)
    
    print(values_string)

    2. Ergebnisse ausgeben

    Dadurch wird eine einzelne Zeichenfolge erzeugt, deren Inhalt nur der Wert ist, ohne äußere Klammern oderdict_valuesEtikett:

    1763510400000, 0.00015218, 0.00015336, 0.00015415, 0.00015067, 1634523

    3. Hinweise zu String-Anführungszeichen

    Beachten Sie, dass in der erwarteten Beispielausgabe andere Werte als Zeitstempel in einfache Anführungszeichen gesetzt sind:1763510400000, '0.00015218', ...

    Wenn Ihr Ziel darin besteht, dass Zeichenfolgenwerte in der endgültigen Ausgabe einfache Anführungszeichen behalten, müssen Sie während der Verkettung manuell Anführungszeichen hinzufügen. Dies ist normalerweise erforderlich, wenn Zeichenfolgen für SQL-Anweisungen oder bestimmte Formate vorbereitet werden.

    # Zusätzlicher Schritt: Behandeln Sie Anführungszeichen manuell, vorausgesetzt, nicht ganzzahlige Werte erfordern Anführungszeichen
    quoted_values = []
    für v in onesymbol_dict.values():
        wenn isinstance(v, (str, float)) oder (isinstance(v, int) und v< 1000000000000): # 假設小數字串需要引號
            quoted_values.append(f"'{v}'")
        else:
            quoted_values.append(str(v))
    
    final_quoted_string = ", ".join(quoted_values)
    
    print(final_quoted_string)

    Dadurch erhalten Sie das Format, das Sie erwarten (vorausgesetzttimeEs sind keine Anführungszeichen erforderlich, bei anderen numerischen Zeichenfolgen ist dies der Fall):

    1763510400000, '0.00015218', '0.00015336', '0.00015415', '0.00015067', '1634523'


    Bestimmen Sie, ob eine Zeichenfolge eine Zahl ist

    Verwenden Sie str.isdigit()

    isdigit()Mit dieser Methode kann überprüft werden, ob eine Zeichenfolge nur numerische Zeichen enthält.

    # Beispiel
    string = "12345"
    if string.isdigit():
        print("ist eine Zahl")
    sonst:
        print("Keine Zahl")

    Beachten:isdigit()Dezimalpunkte oder negative Vorzeichen können nicht verarbeitet werden.

    Verwenden Sie str.replace(), um Dezimalzahlen zu verarbeiten

    Wenn Sie eine Zeichenfolge mit einem Dezimalpunkt überprüfen müssen, können Sie den Dezimalpunkt vor der Verwendung entfernenisdigit()

    # Beispiel
    string = "123,45"
    if string.replace(".", "").isdigit():
        print("ist eine Zahl")
    sonst:
        print("Keine Zahl")

    Diese Methode funktioniert nicht mit negativen Zahlen.

    Mit Try-Exception in eine Zahl umwandeln

    Der gebräuchlichste Ansatz besteht darin, zu versuchen, die Zeichenfolge in eine Gleitkommazahl oder Ganzzahl umzuwandeln und eine Ausnahme abzufangen, wenn die Konvertierung fehlschlägt.

    # Beispiel
    string = "-123,45"
    Versuchen Sie:
        float(string) # Sie können stattdessen int(string) verwenden, um nach Ganzzahlen zu suchen
        print("ist eine Zahl")
    außer ValueError:
        print("Keine Zahl")

    Verwenden Sie reguläre Ausdrücke

    Reguläre Ausdrücke können Zahlen genau abgleichen, einschließlich Ganzzahlen, Dezimalzahlen und negative Zahlen.

    # Beispiel
    Import bzgl
    
    string = "-123,45"
    Muster = r"^-?\d+(\.\d+)?$"
    if re.match(pattern, string):
        print("ist eine Zahl")
    sonst:
        print("Keine Zahl")

    abschließend

    Für einfache Fälle verwenden Sieisdigit(). Für komplexere Fälle (z. B. Umgang mit Dezimalzahlen oder negativen Zahlen) wird die Verwendung empfohlentry-exceptoder regulärer Ausdruck.



    Python f-string

    f-string (formatiertes String-Literal) ist eine leistungsstarke und effiziente String-Formatierungsmethode, die in Python 3.6 eingeführt wurde. Es bietet eine prägnante und gut lesbare Möglichkeit, die Werte von Variablen und Ausdrücken in Zeichenfolgen einzubetten.

    Das Kernmerkmal von F-String ist die Verwendung von Präfixen am Anfang des StringsfoderF, und verwenden Sie geschweifte Klammern{}enthalten, was berechnet und angezeigt werden soll.

    1. Grundlegende Verwendung: Variablen einbetten

    Sie können jeden Variablennamen direkt in geschweifte Klammern einfügen.

    Name = „Alice“
    Alter=30
    message = f „Hallo, mein Name ist {name} und ich bin {age} Jahre alt.“
    # Ausgabe: Hallo, mein Name ist Alice und ich bin 30 Jahre alt.

    2. Eingebettete Ausdrücke

    Die Stärke von f-string besteht darin, dass Sie jeden gültigen Python-Ausdruck in die geschweiften Klammern einfügen können und dieser zur Laufzeit ausgewertet wird.

    Preis = 19,99
    Steuersatz = 0,05
    Gesamt = Preis * (1 + Steuersatz)
    
    # Berechnungen innerhalb des F-Strings durchführen
    result = f „Der Gesamtpreis inklusive Steuern beträgt: {price * (1 + tax_rate):.2f} Yuan.“
    # Ausgabe: Der Gesamtpreis inklusive Steuern beträgt: 20,99 Yuan.
    
    # Funktion aufrufen
    def get_status():
        „OK“ zurückgeben
    
    status_msg = f"Systemstatus: {get_status()}"
    # Ausgabe: Systemstatus: OK

    3. String-Formatierung und -Ausrichtung

    F-Saite unterstützt und.format()Gleiche Methode wie Format Specifier Mini-Language, mit Doppelpunkt:um Ausdrücke und Formatbezeichner zu trennen.

    Formatcode verwenden Beispiel Ausgabe
    :.2f Gleitkommazahl mit zwei Nachkommastellen f"{3.14159:.2f}" 3.14
    : <10 Linksbündig, Breite 10 f"{'Name':<10}" Name
    : >10 Rechts ausrichten, Breite 10 f"{'Value':>10}" Value
    :^10 Mittig ausgerichtet, Breite 10 f"{'Hi':^10}" Hi
    :, Numerisches Tausendertrennzeichen f"{1000000:,}" 1,000,000

    4. F-Strings debuggen

    Ab Python 3.8 führt f-string eine praktische Debugging-Funktion ein, mit der Sie nach der Variablen ein Gleichheitszeichen hinzufügen können.=, zeigt automatisch Variablennamen und ihre Werte an.

    user_id = 42
    is_active = True
    
    debug_output = f „Benutzer-ID ist {user_id=}, Status: {is_active=}“
    # Ausgabe: Benutzer-ID ist user_id=42, Status: is_active=True

    5. Vorsichtsmaßnahmen



    f-string zeigt keine Gleitkomma-Dezimalpunkte an

    1. Lösung 1: Ganzzahlkonvertierung innerhalb des F-Strings (empfohlen)

    Klammern in F-Saite{}Intern können Sie direkt verwendenint()Die Funktion konvertiert die Variable zurück in einen Integer-Typ. Dies ist die klarste und direkteste Methode.

    Beispiele für Python-Implementierungen

    inta = 12 # unter der Annahme einer rohen Ganzzahl
    float_a = inta * 2.0 # Das Ergebnis ist 24,0 (Gleitkommazahl)
    
    # Konvertieren Sie eine Gleitkommazahl direkt im F-String zurück in eine Ganzzahl
    result_str = f"abc def {int(float_a)}"
    
    print(f"Ursprünglicher Wert (float_a): {float_a}")
    print(f"Formatiertes Ergebnis: {result_str}")

    2. Option 2: F-String-Formatbezeichner verwenden (Formatbezeichner)

    Sie können die ganzzahligen Formatcodes aus der Formatierungs-Minisprache verwendendoder.0fum das Ausgabeformat zu steuern.

    A. Verwenden Sie ganzzahlige Formatcodes:d

    verwenden:dPython wird aufgefordert, den Wert bei der Anzeige als Ganzzahl zu behandeln. wenn variabelaeine Gleitkommazahl ist, rundet Python sie vor der Anzeige automatisch auf die nächste Ganzzahl (wenn Ihre Berechnung 24,0 $ ergibt, werden 24 $ angezeigt).

    float_a = 24,0
    result_d = f"abc def {float_a:d}"
    # Ausgabe: abc def 24

    B. Verwenden Sie Code im Gleitkommaformat:.0f

    verwenden:.0fbedeutet, den Wert als Gleitkommazahl zu formatieren, erfordert aber 0 Nachkommastellen. Dies führt auch dazu, dass die Ergebnisse vor der Anzeige gerundet werden.

    float_a = 24,0
    result_0f = f"abc def {float_a:.0f}"
    # Ausgabe: abc def 24

    Zusammenfassung und Vorschläge

    Wenn Sie sicherstellen möchten, dass das Ergebnis eine absolute Ganzzahl ohne Dezimalpunkt ist, wird die Verwendung von Option 1 empfohlen:

    str = f"abc def {int(a)}"


    Python re.split-Funktion

    In Python,re.split()Die Funktion istreEin leistungsstarkes Tool im Modul (reguläre Ausdrücke), mit dem Zeichenfolgen gemäß den in regulären Ausdrücken definierten Trennzeichen (Mustern) aufgeteilt und die Ergebnisse als Liste (Liste) zurückgegeben werden.

    1. Funktionssyntax

    re.split(pattern, string, maxsplit=0, flags=0)

    2. Grundlegende Verwendung

    Verwenden Sie reguläre Ausdrücke, um mehrere oder komplexe Trennzeichen zu definieren.

    Import bzgl
    
    text = "Apfel, Banane; Orange-Traube"
    # Verwenden Sie als Trennzeichen Komma, Semikolon oder Bindestrich
    result = re.split(r'[;,-]', text)
    
    drucken(Ergebnis)
    # Ausgabe: ['Apfel', 'Banane', 'Orange', 'Traube']

    3. Behandeln Sie mehrere Leerzeichen (eine häufige Verwendung)

    mit Standardsaitensplit()anders,re.split()Mehrere aufeinanderfolgende Trennzeichen (z. B. mehrere Leerzeichen) können problemlos gehandhabt und ignoriert werden.

    text = „Wort1 Wort2 Wort3“
    # Verwenden Sie \s+, um ein oder mehrere Leerzeichen als Trennzeichen zu finden
    result = re.split(r'\s+', text)
    
    drucken(Ergebnis)
    # Ausgabe: ['Wort1', 'Wort2', 'Wort3']

    4. Verwenden Sie maxsplit, um die Anzahl der Schnitte zu begrenzen

    Wenn festgelegtmaxsplit, wird der Schneidvorgang nur eine bestimmte Anzahl von Malen ausgeführt und die restlichen Teile bleiben als letztes Element in der Liste erhalten.

    text = "eins:zwei:drei:vier"
    # Nur einmal schneiden
    result = re.split(r':', text, maxsplit=1)
    
    drucken(Ergebnis)
    # Ausgabe: ['eins', 'zwei:drei:vier']

    5. Behalten Sie Trennzeichen bei

    Wenn Sie das Trennzeichenmuster innerhalb der Klammern platzieren(), wird auch das Trennzeichen selbst zwischen den Elementen der Ergebnisliste eingefügt.

    text = „15.01.2025“
    # Setzen Sie Bindestriche in Klammern, damit sie erhalten bleiben
    result = re.split(r'(-)', text)
    
    drucken(Ergebnis)
    # Ausgabe: ['2025', '-', '01', '-', '15']


    Bestimmen Sie den Anfang einer Zeichenfolge, beginnt mit

    verwenden

    startswith()ist ein Python-String (str)-Objektmethode, mit der bestimmt wird, ob die Zeichenfolge mit der angegebenen Teilzeichenfolge beginnt. Wenn es übereinstimmt, kehren Sie zurückTrue; Ansonsten zurückFalse

    Grammatik

    
    str.startswith(prefix[, start[, end]])
    

    Parameterbeschreibung

    Rückgabewert

    Boolescher Wert: Wenn die Zeichenfolge mit dem angegebenen Präfix beginnt, wird zurückgegebenTrue,ansonstenFalse

    Beispiel

    text = „Python-Programmierung“
    
    #Grundlegende Verwendung
    print(text.startswith("Py")) # True
    print(text.startswith("Java")) # False
    
    #Bereich angeben
    print(text.startswith("thon", 2)) # True (beginnend bei Index 2 ist „thon“)
    
    # mehrere Ausrichtungen
    print(text.startswith(("Py", "Java", "C"))) # True, weil jede Übereinstimmung
    
    # Groß- und Kleinschreibung wird nicht beachtet (kann zuerst in Kleinbuchstaben umgewandelt werden)
    print(text.lower().startswith("py")) # True

    Häufige Anwendungen

    verlängern

    Um festzustellen, ob eine Zeichenfolge mit einem bestimmten Text „endet“, können Sie verwendenendswith()Methoden, Syntax undstartswith()Dasselbe.

    Dateiname = „Bericht.pdf“
    if filename.endswith(".pdf"):
        print("Dies ist eine PDF-Datei")


    Löschen Sie das letzte Zeichen der Zeichenfolge

    veranschaulichen

    In Python sind Strings unveränderliche Objekte. Um das letzte Zeichen zu entfernen, wird normalerweise String-Slicing verwendet, um eine neue Zeichenfolge zu erstellen.

    Beispiel

    text = "Hallo!"
    
    #Methode 1: Schneiden verwenden
    new_text = text[:-1]
    print(new_text) #Ausgabe: Hallo
    
    #Methode 2: Verwenden Sie rstrip(), um bestimmte Endzeichen zu entfernen
    text2 = „Hallo!!!“
    new_text2 = text2.rstrip("!")
    print(new_text2) #Ausgabe: Hallo
    
    #Methode 3: Stellen Sie sicher, dass es nicht leer ist, und löschen Sie dann das letzte Zeichen
    wenn Text:
        text = text[:-1]
    drucken(Text)

    Ergebnisse ausgeben

    
    Hello
    Hello
    Hello
    

    veranschaulichen

    verlängern

    Um die führenden Zeichen zu entfernen, verwenden Sie:

    
    text = text[1:]
    

    Zusammenfassen



    Suchen Sie den Inhalt vor der Teilzeichenfolge in der Zeichenfolge

    Problemstellung

    Gegeben eine Zeichenfolgestr1, wir hoffen, darin zu findenstrAoderstrBDer Teil, der vorher kommt. Zum Beispiel:

    str1 = "Hello World, this is a test. Stop here or continue."
    strA = "Stop"
    strB = "continue"
    

    Das Ziel ist zu erhalten"Hello World, this is a test. "

    Verwenden Sie re.split()

    re.split()Sie können eine Zeichenfolge basierend auf mehreren Schlüsselwörtern aufteilen und den ersten Teil nehmen:

    import re
    
    def get_substring_before(text, strA, strB):
        result = re.split(f"{re.escape(strA)}|{re.escape(strB)}", text, maxsplit=1)[0]
        return result
    
    str1 = "Hello World, this is a test. Stop here or continue."
    strA = "Stop"
    strB = "continue"
    
    print(get_substring_before(str1, strA, strB))  # "Hello World, this is a test. "
    

    Verwenden Sie re.search()

    re.search()kann passend verwendet werdenstrAoderstrB, und holen Sie sich den Inhalt vor dem Abgleich:

    import re
    
    def get_substring_before(text, strA, strB):
        match = re.search(f"{re.escape(strA)}|{re.escape(strB)}", text)
        return text[:match.start()] if match else text
    
    str1 = "Hello World, this is a test. Stop here or continue."
    print(get_substring_before(str1, "Stop", "continue"))  # "Hello World, this is a test. "
    

    Verwenden Sie die Methode find()

    find()Sie können manuell nach dem frühesten suchenstrAoderstrB, und rufen Sie dann den entsprechenden Teil ab:

    def get_substring_before(text, strA, strB):
        indexA = text.find(strA)
        indexB = text.find(strB)
        
        indices = [i for i in [indexA, indexB] if i != -1]
        first_index = min(indices, default=len(text))
        
        return text[:first_index]
    
    str1 = "Hello World, this is a test. Stop here or continue."
    print(get_substring_before(str1, "Stop", "continue"))  # "Hello World, this is a test. "
    

    abschließend



    Verketten Sie mehrere Werte zu einer Zeichenfolge

    Verwenden Sie Join (Sie müssen zuerst alles in Strings konvertieren)

    Werte = ["str1", "str2", 123, "str3", 456]
    
    s = ", ".join(str(v) für v in Werten)
    print(s) # Ausgabe: str1, str2, 123, str3, 456

    Behandeln Sie gemischte Zeichenfolgen und Ganzzahlen automatisch

    def join_values(*args, sep=", "):
        return sep.join(str(v) for v in args)
    
    print(join_values("str1", "str2", 88, "str3"))
    # Ausgabe: str1, str2, 88, str3

    Wenn es sich bei der Quelle um ein Diktat handelt, sortieren Sie nach Schlüssel und verketten Sie es dann

    Daten = {
        „str1“: „Hallo“,
        „str2“: „Welt“,
        "int1": 123,
        „str3“: „ok“
    }
    
    # Nach Schlüssel sortieren und dann beitreten
    s = ", ".join(str(data[k]) for k in sorted(data.keys()))
    print(s) # Hallo, Welt, 123, ok

    Um Schlüssel und Wert miteinander zu verbinden

    s = ", ".join(f"{k}={v}" für k, v in data.items())
    Druck(e)
    # Ausgabe: str1=hello, str2=world, int1=123, str3=ok

    Die Quelle ist eine Liste von Diktaten, jedes Diktat wird in einer Spalte zusammengefasst

    rows = [
        {"str1": "A", "int1": 10},
        {"str1": "B", "int1": 20},
    ]
    
    for row in rows:
        print(", ".join(str(v) for v in row.values()))
    # A, 10
    # B, 20
    

    Universelle Funktion: Wechseln Sie zwischen dem Modus „mit Anführungszeichen“ und „ohne Anführungszeichen“.

    def join_values(values, sep=", ", quoted=False):
        falls zitiert:
            # Verwenden Sie vollständige einfache Anführungszeichen „“
            return sep.join(f"‘{v}'" für v in Werten)
        sonst:
            return sep.join(str(v) für v in Werten)
    
    Werte = ["str1", "str2", 88, "str3"]
    
    print(join_values(values, quoted=False))
    # Ausgabe: str1, str2, 88, str3
    
    print(join_values(values, quoted=True))
    # Ausgabe: ‚str1‘, ‚str2‘, ‚88‘, ‚str3‘

    Kann die *args-Eingabeversion unterstützen

    def join_args(*args, sep=", ", quoted=False):
        if quoted:
            return sep.join(f"‘{v}’" for v in args)
        return sep.join(str(v) for v in args)
    
    print(join_args("str1", "str2", 88, "str3", quoted=True))
    # ‘str1’, ‘str2’, ‘88’, ‘str3’
    

    Diktat unterstützen (nur Ausgabewert)

    data = {"str1": "hello", "str2": "world", "int1": 123}
    
    print(join_values(data.values(), quoted=True))
    # ‘hello’, ‘world’, ‘123’
    

    Unterstützt das Schlüssel=Wert-Format

    def join_key_value(d, sep=", ", quoted=False):
        if quoted:
            return sep.join(f"{k}=‘{v}’" for k, v in d.items())
        return sep.join(f"{k}={v}" for k, v in d.items())
    
    print(join_key_value(data, quoted=True))
    # str1=‘hello’, str2=‘world’, int1=‘123’
    


    re.match()

    re.match()

    Pythonre.matchIst eine Funktion im Modul für reguläre Ausdrücke, die für den Abgleich vom Anfang der Zeichenfolge verwendet wird. Wenn die Übereinstimmung erfolgreich ist, geben Sie a zurückMatchObjekt; andernfalls zurückgebenNone

    Grammatik

    re.match(pattern, string, flags=0)

    Parameterbeschreibung:

    Gemeinsame Eigenschaften und Methoden

    Anwendungsbeispiele

    Import bzgl
    
    #Definieren Sie eine Zeichenfolge
    text = „123 Hallo Welt!“
    
    # Verwenden Sie re.match, um Zahlen von Anfang an abzugleichen
    match = re.match(r"(\d+)\s+(.*)", Text)
    
    Bei Übereinstimmung:
        print(f"Gesamtes Übereinstimmungsergebnis: {match.group(0)}") # 123 Hallo Welt!
        print(f"Zahlenteil: {match.group(1)}") # 123
        print(f"Textteil: {match.group(2)}") # Hallo Welt!
    sonst:
        print("Match fehlgeschlagen")

    Ergebnisse ausgeben

    Das gesamte Matching-Ergebnis: 123 Hello World!
    Numerischer Teil: 123
    Textteil: Hallo Welt!

    Dinge zu beachten

    regulärer Ausdruck

    Regulärer Ausdruck (kurz Regex) ist eine Syntax, die zur Beschreibung von String-Matching-Regeln verwendet wird. Es wird häufig zum Suchen, Ersetzen oder Überprüfen von Zeichenfolgen verwendet. in PythonreIm ModulpatternDas ist der Kernbestandteil der Definition dieser Regeln.

    grundlegende Syntaxelemente

    Erweiterte Nutzung

    Beispiel

    Import bzgl
    
    # Beispiel 1: Inhalte abgleichen, die mit einer Zahl beginnen
    Muster = r"^\d+"
    text = "123abc"
    match = re.match(Muster, Text)
    Bei Übereinstimmung:
        print(f"Übereinstimmendes Ergebnis: {match.group()}") # Ausgabe: 123
    
    #Beispiel 2: Text nach Zahlen zuordnen
    Muster = r"(\d+)\s+(.*)"
    text = „123 Hallo Welt“
    match = re.match(Muster, Text)
    Bei Übereinstimmung:
        print(f"Zahlenteil: {match.group(1)}") # Ausgabe: 123
        print(f"Textteil: {match.group(2)}") # Ausgabe: Hello World

    Anwendungsszenarien regulärer Ausdrücke



    Anwendung von re.search()

    Grundlegende Verwendung

    re.search()Wird verwendet, um nach der ersten Übereinstimmung eines regulären Ausdrucks in einer Zeichenfolge zu suchen und diese zurückzugebenMatchObjekt, wird zurückgegeben, wenn keine Übereinstimmung vorliegtNone

    Import bzgl
    
    text = „Hallo 2024!“
    match = re.search(r"\d+", text)
    
    Bei Übereinstimmung:
        print("Nummer gefunden:", match.group()) # 2024

    Gibt ein Match-Objekt zurück

    Wannre.search()Wenn eine Übereinstimmung gefunden wird, wird sie zurückgegebenMatchObjekte können über die folgenden Methoden auf Informationen zugreifen:

    Import bzgl
    
    text = „Python 3.10 ist großartig!“
    match = re.search(r"\d+\.\d+", text)
    
    Bei Übereinstimmung:
        print("Match content:", match.group()) # 3.10
        print("Startindex:", match.start()) # 7
        print("End index:", match.end()) # 11
        print("range:", match.span()) # (7, 11)

    Verwenden Sie den Gruppenabgleich

    durch Klammern()um eine Gruppe zu erstellen und zu verwendengroup(n)um den entsprechenden passenden Inhalt zu extrahieren.

    Import bzgl
    
    text = „John Doe, Alter: 25“
    match = re.search(r"(\w+) (\w+), Alter: (\d+)", Text)
    
    Bei Übereinstimmung:
        print("Nachname:", match.group(1)) # John
        print("name:", match.group(2)) # Doe
        print("Alter:", match.group(3)) # 25

    Vergleich mit re.findall()

    re.search()Es wird nur das erste übereinstimmende Ergebnis zurückgegebenre.findall()Alle passenden Ergebnisse werden zurückgegeben.

    import re
    
    text = "Price: $10, Discount: $2, Tax: $1"
    
    match = re.search(r"\$\d+", text)
    print("re.search:", match.group())  # $10
    
    matches = re.findall(r"\$\d+", text)
    print("re.findall:", matches)  # ['$10', '$2', '$1']
    

    abschließend

    re.search()Geeignet zum Finden des ersten passenden Ergebnisses und kann verwendet werdenMatchMelden Sie sich an, um detaillierte Informationen zu erhalten. Für mehrere übereinstimmende Ergebnisse verwenden Siere.findall()



    Nicht erfassende Gruppen regulärer Ausdrücke

    Verbessern Sie die Matching-Leistung

    In einem regulären Ausdruck(...)Passende Inhalte werden erfasst und gespeichertgroup(n), aber nicht die Capture-Gruppe(?:...)Es wird nur für die Organisationsstruktur verwendet und hat keinen Einfluss auf die Gruppennummer, sodass der Abgleich schneller erfolgt.

    Vermeiden Sie es, den Gruppenindex zu beeinflussen

    Bei Verwendung im regulären Ausdruck()passende Bedingungen zu organisieren, die sich auswirkengroup(n)Nummer. verwenden(?:...)Dadurch wird sichergestellt, dass der Gruppenindex unverändert bleibt.

    import re
    
    text = "2024-03-12"
    pattern = r"(\d{4})-(?:\d{2})-(\d{2})"
    
    match = re.search(pattern, text)
    print(match.group(1))  # 2024
    print(match.group(2))  # 12
    

    Gepaart mit OR-Operator

    verwenden(?:...|...)kann lassen|Der Operator wirkt sich auf übereinstimmende Inhalte aus, nicht jedoch auf den Gruppenzugriff.

    import re
    
    text = "bar123"
    pattern = r"(?:foo|bar|baz)\d+"
    
    match = re.search(pattern, text)
    print(match.group())  # bar123
    

    Gilt für die Analyse von --user-data-dir

    Verwenden Sie beim Parsen von Chrome-Parametern(?:...)Dadurch wird sichergestellt, dass das passende Format keinen Einfluss auf die Gruppennummer hat.

    import re
    
    cmdline = '--user-data-dir="C:\\Users\\moirg\\AppData\\Local\\Google\\Chrome\\User Data"'
    
    match = re.search(r'--user-data-dir=(?:"([^"]+)"|(\S+))', cmdline)
    user_data_dir = match.group(1) or match.group(2)
    
    print(user_data_dir)  # C:\Users\moirg\AppData\Local\Google\Chrome\User Data
    

    abschließend

    (?:...)Es kann die Leistung regulärer Ausdrücke verbessern, Auswirkungen auf den Gruppenindex vermeiden und eignet sich für|Operationen und spezifischer Bedingungsabgleich machen den Code effizienter und klarer.



    Python-Datum/Uhrzeit

    Modul importieren

    import datetime

    Holen Sie sich die aktuelle Uhrzeit

    now = datetime.datetime.now()
    print(now)

    Angegebene Zeit erstellen

    dt = datetime.datetime(2025, 7, 2, 14, 30, 0)
    print(dt)

    Zeitzeichenfolge formatieren

    now = datetime.datetime.now()
    formatted = now.strftime("%Y-%m-%d %H:%M:%S")
    print(formatted)

    Zeitzeichenfolge analysieren

    dt_str = "2025-07-02 14:30:00"
    parsed = datetime.datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S")
    print(parsed)

    Zeitaddition und -subtraktion

    now = datetime.datetime.now()
    delta = datetime.timedelta(days=7)
    next_week = now + delta
    print(next_week)

    Holen Sie sich das heutige Datum

    today = datetime.date.today()
    print(today)

    Termine vergleichen

    dt1 = datetime.datetime(2025, 7, 1)
    dt2 = datetime.datetime(2025, 7, 2)
    print(dt1 < dt2)

    Holen Sie sich den Zeitunterschied

    dt1 = datetime.datetime(2025, 7, 1, 12, 0, 0)
    dt2 = datetime.datetime(2025, 7, 2, 14, 30, 0)
    diff = dt2 - dt1
    print(diff)
    print(diff.total_seconds())

    Holen Sie sich den Wochentag

    today = datetime.date.today()
    print(today.weekday()) # 0 = Montag, 6 = Sonntag


    Problem mit der Zeitzone von Datum und Uhrzeit

    Offset-naiver und offset-bewusster Datetime-Subtraktionsfehler

    Wenn ein Datetime-Objekt keine Zeitzone hat (naiv) und das andere eine Zeitzone hat (bewusst) und subtrahiert wird, wird Folgendes erzeugt:

    TypeError: can't subtract offset-naive and offset-aware datetimes
    

    Überprüfen Sie, ob datetime naiv oder bewusst ist

    from datetime import datetime
    
    def is_aware(dt):
        return dt.tzinfo is not None and dt.tzinfo.utcoffset(dt) is not None
    
    def is_naive(dt):
        return not is_aware(dt)
    
    dt1 = datetime.now()                 # naive
    dt2 = datetime.now().astimezone()    # aware
    
    print(is_naive(dt1), is_aware(dt1))
    print(is_naive(dt2), is_aware(dt2))
    

    Lösung A: Konvertieren in „Aware“ (empfohlen)

    Geeignet für Situationen über Zeitzonen hinweg oder wenn eine genaue Zeitberechnung erforderlich ist.

    aus Datum/Uhrzeit Import Datum/Uhrzeit, Zeitzone
    
    sql_dt = sql_dt.replace(tzinfo=timezone.utc) # SQL-Datenübertragung bewusst
    now_dt = datetime.now(timezone.utc) # Aware für die aktuelle Zeit verwenden
    
    diff = now_dt - sql_dt
    print(diff.total_seconds())

    Lösung B: Konvertieren in „naiv“ (nicht empfohlen, Zeitzonenunterschied wird ignoriert)

    sql_dt = sql_dt.replace(tzinfo=None)
    now_dt = datetime.now()
    
    diff = now_dt - sql_dt
    

    Zusammenfassen



    Berechnen Sie die Standardabweichung einer Reihe

    veranschaulichen

    In Python können Sie die integrierten Module verwendenstatisticsvonstdev()oderpstdev()Berechnen Sie die Stichprobenstandardabweichung oder Populationsstandardabweichung.

    Beispiel

    Statistiken importieren
    
    Verhältnisse = [2,3, 2,8, 3,1, 2,5, 3,0]
    
    # Durchschnitt
    Durchschnitt = Summe(Verhältnisse) / len(Verhältnisse)
    
    #Stichprobenstandardabweichung (n-1)
    std_sample = Statistics.stdev(Verhältnisse)
    
    #Matrix-Standardabweichung (n)
    std_population = Statistics.pstdev(Verhältnisse)
    
    print(f"Durchschnitt: {Durchschnitt:.2f}")
    print(f"Standardabweichung der Stichprobe: {std_sample:.3f}")
    print(f"Standardabweichung der Bevölkerung: {std_population:.3f}")

    Ergebnisse ausgeben

    Durchschnitt: 2,74
    Probenstandardabweichung: 0,303
    Populationsstandardabweichung: 0,271

    Formelmethode (ohne Verwendung von Mods)

    Wenn Sie sich nicht darauf verlassen wollenstatisticsModul, Sie können es mithilfe mathematischer Formeln selbst berechnen:

    Verhältnisse = [2,3, 2,8, 3,1, 2,5, 3,0]
    Durchschnitt = Summe(Verhältnisse) / len(Verhältnisse)
    
    #Standardabweichung (Grundgesamtheit)
    Varianz = Summe((x - Durchschnitt) ** 2 für x in Verhältnissen) / len(Verhältnisse)
    std_dev = Varianz ** 0,5
    
    print(f"Standardabweichung: {std_dev:.3f}")

    Ergebnisse ausgeben

    Standardabweichung: 0,271

    Differenzbeschreibung

    Zusammenfassen



    Python zeigt ANSI-Farbzeichenfolge an

    grundlegendes Beispiel

    # ANSI-Farbcode-Beispiel
    print("\033[31m roter Text\033[0m")
    print("\033[32m grüner Text\033[0m")
    print("\033[33mgelber Text\033[0m")
    print("\033[34m blauer Text\033[0m")
    print("\033[35m lila Text\033[0m")
    print("\033[36m cyanfarbener Text\033[0m")
    print("\033[37m weißer Text\033[0m")

    Fett und Hintergrundfarbe

    print("\033[1;31m fetter roter Text\033[0m")
    print("\033[42m grüner Hintergrundtext\033[0m")

    Benutzerdefinierte Farbkombination

    # Format: \033[style; Vordergrundfarbe; Hintergrundfarbe m
    # Stil: 0=Standard, 1=Fett, 4=Unterstrichen
    # Vordergrundfarbe: 30~37
    # Hintergrundfarbe: 40~47
    
    print("\033[1;33;44m fetter gelber Text + blauer Hintergrund\033[0m")

    Kann in Funktionen gekapselt werden

    def color_text(text, color_code):
        return f"\033[{color_code}m{text}\033[0m"
    
    print(color_text("Warning!", "1;31")) # Fettes Rot
    print(color_text("Success!", "1;32")) # Fettgrün


    Prüfen Sie, ob das aktuelle Terminal ANSI-Farben unterstützt

    Methode 1: Überprüfen Sie sys.stdout.isatty()

    importsys
    
    wenn sys.stdout.isatty():
        print("Terminal unterstützt möglicherweise ANSI-Farben")
    sonst:
        print("Möglicherweise handelt es sich um eine Datei oder eine Ausgabeumgebung, die keine Farbe unterstützt")

    Methode 2: Colorama verwenden (plattformübergreifende Lösung)

    Colorama importieren
    colorama.init()
    
    print("\033[32mDieser Text sollte grün sein\033[0m")

    Methode 3: Tatsächliche Testausgabe

    def unterstützt_ansi():
        Versuchen Sie:
            print("\033[31m test red\033[0m")
            Rückgabe True
        außer:
            Gibt False zurück
    
    print("ANSI wird unterstützt", wenn_ansi() unterstützt, sonst "ANSI wird nicht unterstützt")

    Auffüllen



    Die Python-Eingabe unterstützt die automatische Vervollständigung

    veranschaulichen

    In Python,input()Die Funktion selbst wird nicht unterstütztTabAutomatisch abgeschlossen. Um diese Funktion zu erreichen, können Sie kombinierenreadlineModul, das Benutzern die Verwendung ermöglichtTabFühren Sie eine automatische Vervollständigung durch (ähnlich wie Bash oder IPython).

    grundlegendes Beispiel

    Readline importieren
    
    # Definieren Sie eine Liste von Zeichenfolgen, die vervollständigt werden können
    WÖRTER = ['Apfel', 'Banane', 'Kirsche', 'Traube', 'Orange', 'Wassermelone']
    
    defcompleter(text, state):
        „“Autovervollständigungsfunktion: Vergleichen Sie verfügbare Zeichenfolgen basierend auf Eingabepräfixen““
        Optionen = [w für w in WORDS if w.startswith(text)]
        wenn Zustand < len(Optionen):
            Rückgabeoptionen[Status]
        sonst:
            return Keine
    
    # Abschlussfunktion aktivieren
    readline.set_completer(Vervollständiger)
    readline.parse_and_bind('tab: Complete')
    
    # Benutzereingabe (unterstützt Tab)
    user_input = input("Geben Sie den Namen der Frucht ein (zum Vervollständigen können Sie die Tabulatortaste drücken):")
    print(f"Was Sie eingegeben haben, ist: {user_input}")

    Bedienungsanleitung

    Erweitert: Dynamische Vervollständigung

    Sie können die Vervollständigungsliste auch basierend auf dem aktuellen Kontext oder dynamischen Inhalten aktualisieren:

    Readline importieren
    
    defdynamic_completer(text, state):
        current_words = ['Katze', 'Auto', 'Hund', 'Ente', 'Hirsch']
        Optionen = [w für w in aktuellen_Wörtern, wenn w.startswith(text)]
        wenn Zustand < len(Optionen):
            Rückgabeoptionen[Status]
        return Keine
    
    readline.set_completer(dynamic_completer)
    readline.parse_and_bind('tab: Complete')
    
    command = input("Geben Sie den Tiernamen ein:")
    print("Sie geben ein:", Befehl)

    Dinge zu beachten

    Zusammenfassen



    Python-Prozess

    Python-Schleife

    für mit range()

    Die gebräuchlichste Schleife wird verwendet, um eine feste Anzahl oder Sequenz auszuführen.

    # von 0 bis 4
    für i im Bereich(5):
        print(i) #0,1,2,3,4
    
    #Geben Sie den Startpunkt, den Endpunkt und die Schrittgröße an
    für i im Bereich(2, 10, 2):
        print(i) #2,4,6,8

    für mit iterierbaren Objekten

    Listen, Zeichenfolgen, Wörterbücher usw. direkt iterieren.

    Früchte = [„Apfel“, „Banane“, „Kirsche“]
    
    für Obst in Früchten:
        drucken(Frucht)
    
    für ch in „Hallo“:
        drucken(ch)
    
    #Durch das Wörterbuch iterieren
    person = {"name": "Tom", "age": 25}
    für Schlüssel, Wert in person.items():
        print(Schlüssel, Wert)

    while-Schleife

    Es wird immer ausgeführt, wenn die Bedingung wahr ist.

    
    count = 0
    while count < 5:
        print(count)
        count += 1
    

    Pause und weitermachen

    Steuern Sie den Schleifenprozess.

    für i im Bereich(10):
        wenn ich == 3:
            weiter # dieses Mal überspringen
        wenn ich == 7:
            Pause # Früh beenden
        drucken(i)

    verschachtelte Schleife

    Gehen Sie zurück in den Kreis und legen Sie es wieder in den Kreis.

    
    for i in range(3):
        for j in range(2):
            print(f"i={i}, j={j}")
    

    Schleifenübereinstimmung mit else

    Sie können entweder „für“ oder „während“ hinzufügenelse, wird nur „normaler Abschluss (keine Pause)“ ausgeführt.

    für i im Bereich(5):
        drucken(i)
    sonst:
        print("Schleife endet normal")

    Listenverständnis

    Eine prägnante Schreibmethode kann die Schleife vervollständigen und die Liste in einer Zeile generieren.

    
    squares = [x**2 for x in range(5)]
    print(squares)  # [0,1,4,9,16]
    

    abschließend



    Python-Ausnahmebehandlung

    grundlegende grammatikalische Struktur

    Python verwendet die try...exclusive-Anweisung zum Abfangen und Behandeln von Fehlern, die während der Programmausführung auftreten, um Programmabstürze zu verhindern.

    Versuchen Sie:
        # Code, der Ausnahmen verursachen kann
        Ergebnis=10/0
    außer ZeroDivisionError:
        # Code wird ausgeführt, wenn eine bestimmte Ausnahme auftritt
        print("Der Divisor darf nicht Null sein")
    außer Ausnahme als e:
        #Alle anderen Arten von Ausnahmen abfangen
        print(f"Es ist ein Fehler aufgetreten: {e}")
    sonst:
        # Ausführen, wenn im Try-Block keine Ausnahme auftritt
        print("normaler Betrieb")
    endlich:
        # Wird unabhängig davon ausgeführt, ob eine Ausnahme auftritt
        print("Ressourcen bereinigen oder Dateien schließen")

    Beschreibung der Blockfunktion

    Mehrere Ausnahmen abfangen

    Sie können Tupel in einer Ausnahme verwenden, um mehrere Fehlertypen gleichzeitig zu behandeln.

    Versuchen Sie:
        # Operationen durchführen
        passieren
    außer (ValueError, TypeError):
        print("Der eingegebene Datentyp oder Wert ist falsch")

    Ausnahmen aktiv auslösen

    Verwenden Sie das Schlüsselwort raise, um Ausnahmen basierend auf logischen Anforderungen manuell auszulösen.

    age = -1
    if age < 0:
        raise ValueError("年齡數值不可為負數")

    Best Practices



    Python-Kategorien

    1. Grundlegende Kategoriekonzepte

    Python-Klassen sind Strukturen, die zur Kapselung von Daten und Verhalten verwendet werden. Kategorien werden zum Erstellen von Objekten verwendet, bei denen es sich um Instanzen von Kategorien handelt. Zum Beispiel:
    Klasse MyClass:
        def __init__(self, value):
            self.value = Wert
    
        def display(self):
            print(f"Wert: {self.value}")
    
    obj = MyClass(10)
    obj.display() # Ausgabe: Wert: 10

    2. Statische Methode

    Statische Methoden werden mit dem Dekorator „@staticmethod“ definiert und haben nichts mit Kategorien und Objekten zu tun. Sie können nicht auf Kategorieeigenschaften oder Objekteigenschaften zugreifen. Gilt für einige Instrumentalfunktionen:

    Klasse MyClass:
        @staticmethod
        def add(a, b):
            gib a + b zurück
    
    result = MyClass.add(5, 3)
    print(result) # Ausgabe: 8

    3. Klassenmethode

    Klassenmethoden werden mit dem „@classmethod“-Dekorator definiert, der erste Parameter ist die Klasse selbst (normalerweise „cls“ genannt) und auf Klassenattribute kann zugegriffen werden:

    classMyClass:
        Anzahl = 0
    
        @classmethod
        def increment_count(cls):
            cls.count += 1
    
    MyClass.increment_count()
    print(MyClass.count) # Ausgabe: 1

    4. Vererbung und Polytyp

    Python unterstützt die Klassenvererbung. Unterklassen können die Eigenschaften und Methoden der übergeordneten Klasse erben und die Methoden der übergeordneten Klasse überschreiben:

    Klasse Elternteil:
        auf jeden Fall grüßen(selbst):
            print("Hallo vom Elternteil!")
    
    Klasse Kind (Elternteil):
        auf jeden Fall grüßen(selbst):
            print("Hallo vom Kind!")
    
    obj = Child()
    obj.greet() # Ausgabe: Hallo vom Kind!

    5. Kategorieattribute und Objektattribute

    Kategorieattribute gehören zur gesamten Kategorie und werden von allen Objekten gemeinsam genutzt. Objektattribute gehören zu jedem Objekt:

    classMyClass:
        class_attr = „Ich bin ein Klassenattribut“
    
        def __init__(self, value):
            self.instance_attr = Wert
    
    obj1 = MyClass(10)
    obj2 = MyClass(20)
    
    print(MyClass.class_attr) # Ausgabe: Ich bin ein Klassenattribut
    print(obj1.instance_attr) # Ausgabe: 10
    print(obj2.instance_attr) # Ausgabe: 20

    6. Objekt als Basisklasse verwenden

    Alle Klassen in Python erben standardmäßig von „object“, einer integrierten Basisklasse, die einige grundlegende Methoden wie „__str__“ und „__eq__“ bereitstellt:

    Klasse MyClass(Objekt):
        def __init__(self, value):
            self.value = Wert
    
        def __str__(self):
            return f"MyClass mit dem Wert {self.value}"
    
    obj = MyClass(5)
    print(obj) # Ausgabe: MyClass mit Wert 5

    7. Zusammenfassung

    - **Statische Methode**: Unabhängig von Kategorien, hauptsächlich für Werkzeugfunktionen verwendet. - **Klassenmethode**: Daten auf Kategorieebene bearbeiten. - **Objektmethode (Instanzmethode)**: Daten auf Objektebene bearbeiten. - **Vererbung und Polytyp**: Unterstützt die Wiederverwendung von Code und flexibles Design. - **Objektbasisklasse**: Stellt grundlegende Methoden bereit, damit alle Kategorien ein konsistentes Verhalten aufweisen.

    Klassenvererbung

    1. Grundlegende Vererbungskonzepte

    In Python ermöglicht die Klassenvererbung, dass Unterklassen (abgeleitete Klassen) die Eigenschaften und Methoden der übergeordneten Klasse (Basisklasse) erben, um eine Wiederverwendung von Code zu erreichen. Zum Beispiel:

    Klasse Elternteil:
        auf jeden Fall grüßen(selbst):
            print("Hallo vom Elternteil!")
    
    Klasse Kind (Elternteil):
        passieren
    
    c = Kind()
    c.greet() # Ausgabe: Hallo vom Elternteil!

    2. Die Unterklasse überschreibt die Methode der übergeordneten Klasse

    Unterklassen können die Methoden der übergeordneten Klasse überschreiben (Override) und ihre Funktionen neu schreiben:

    Klasse Elternteil:
        auf jeden Fall grüßen(selbst):
            print("Hallo vom Elternteil!")
    
    Klasse Kind (Elternteil):
        auf jeden Fall grüßen(selbst):
            print("Hallo vom Kind!")
    
    c = Kind()
    c.greet() # Ausgabe: Hallo vom Kind!

    3. Verwenden Sie super(), um die Methode der übergeordneten Klasse aufzurufen

    In der Unterklasse können Sie die Methode der übergeordneten Klasse über „super()“ aufrufen und das Verhalten der übergeordneten Klasse erweitern:

    Klasse Elternteil:
        auf jeden Fall grüßen(selbst):
            print("Hallo vom Elternteil!")
    
    Klasse Kind (Elternteil):
        auf jeden Fall grüßen(selbst):
            super().greet()
            print("Hallo vom Kind!")
    
    c = Kind()
    c.greet()
    # Ausgabe:
    # Hallo von den Eltern!
    # Hallo vom Kind!

    4. Mehrfachvererbung

    Python unterstützt die Mehrfachvererbung und Unterklassen können mehrere übergeordnete Klassen gleichzeitig erben:

    Klasse Parent1:
        auf jeden Fall grüßen(selbst):
            print("Hallo von Parent1!")
    
    Klasse Parent2:
        auf jeden Fall grüßen(selbst):
            print("Hallo von Parent2!")
    
    Klasse Child(Parent1, Parent2):
        passieren
    
    c = Kind()
    c.greet() # Ausgabe: Hallo von Parent1! (laut Erbfolge)

    5. Methodenauflösungsauftrag (MRO)

    Bei der Mehrfachvererbung wird MRO (Method Resolution Order) verwendet, um die Auflösungsreihenfolge von Methoden zu bestimmen. Dies kann mit dem Attribut „__mro__“ überprüft werden:

    print(Child.__mro__)
    # Ausgabe: (, , , )
    

    6. Abstrakte Basisklasse

    Verwenden Sie das Modul „abc“, um eine abstrakte Basisklasse zu definieren, um Unterklassen zu zwingen, bestimmte Methoden zu implementieren:

    from abc import ABC, abstractmethod
    
    Klasse AbstractParent(ABC):
        @abstractmethod
        auf jeden Fall grüßen(selbst):
            passieren
    
    Klasse Child(AbstractParent):
        auf jeden Fall grüßen(selbst):
            print("Hallo vom Kind!")
    
    c = Kind()
    c.greet() # Ausgabe: Hallo vom Kind!

    7. Zusammenfassung

    - Durch Vererbung wird der Klassencode wiederverwendbar und erweiterbar. - Unterklassen können übergeordnete Klassenmethoden überschreiben und übergeordnete Klassenmethoden mit „super()“ aufrufen. - Unterstützt Mehrfachvererbung, Sie müssen jedoch auf die Methodenauflösungsreihenfolge (MRO) achten. - Abstrakte Basisklassen können verwendet werden, um Unterklassen zur Implementierung bestimmter Methoden zu zwingen, was für das Schnittstellendesign geeignet ist.

    Erstellen Sie eine temporäre Klasse, die ClassB erbt

    Beispielcode

    KlasseKlasseB:
        auf jeden Fall grüßen(selbst):
            print("Hallo aus KlasseB!")
    
    # Erstellen Sie dynamisch eine temporäre Klasse, die von ClassB geerbt wird
    TempClass = type('TempClass', (ClassB,), {
        'greet': lambda self: (print("Hallo von TempClass!"), super(TempClass, self).greet())[0]
    })
    
    #Instanz erstellen und testen
    temp = TempClass()
    temp.greet()

    erklären

    1. type()-Funktion:
      type('TempClass', (ClassB,), {...})
      - 'TempClass': Neuer Kategoriename.
      - (ClassB,): Tupel der Grundkategorien, hier gibt es nur KlasseB.
      - {...}: Neue Attribute oder Methoden.
    2. Lambda-Funktionen werden zum Überschreiben von Methoden verwendet:
      - AnpassengreetDie Methode besteht darin, zuerst die neue Nachricht auszudrucken und sie dann zu übergebensuper()übergeordnete Kategorie aufrufengreet

    Ergebnisse ausgeben

    Hello from TempClass!
    Hello from ClassB!


    Wechseln Sie zwischen der Verwendung verschiedener Kategorien mit derselben Benutzeroberfläche

    veranschaulichen

    Angenommen, es gibt zwei KategorienAClassUndBClass, sie haben Funktionen mit demselben Namen und denselben Parametern. Wir möchten in der Lage sein, die zu verwendende Kategorie einfach zu wechseln, ohne die Hauptprogrammlogik ändern zu müssen.

    Beispielprogramm

    Klasse AKlasse:
        def Prozess(Selbst, Daten):
            print(f"AClass processing: {data}")
    
        def result(self):
            Rückgabe „Ergebnis aus AClass“
    
    
    Klasse BKlasse:
        def Prozess(Selbst, Daten):
            print(f"BClass processing: {data}")
    
        def result(self):
            Rückgabe „Ergebnis aus BClass“
    
    
    # Sie können über die Einstellungen steuern, welche Kategorie verwendet werden soll
    USE_A = True
    
    #Dynamische Auswahl von Kategorien
    SelectedClass = AClass, wenn USE_A, sonst BClass
    
    # Erstellen Sie eine Instanz und verwenden Sie sie
    obj = SelectedClass()
    obj.process("Testdaten")
    print(obj.result())

    Ergebnisse ausgeben (USE_A=True)

    AClass-Verarbeitung: Testdaten
    Ergebnisse von AClass

    Ergebnisse ausgeben (USE_A=False)

    BClass-Verarbeitung: Testdaten
    Ergebnisse von BClass

    Fortgeschrittenere Schreibweise: Verwendung der Factory-Funktion

    def get_class(name):
        Zuordnung = {
            „A“: AKlasse,
            „B“: BKlasse
        }
        Return Mapping.get(name, AClass) # Standard ist AClass
    
    # Dynamische Auswahl
    cls = get_class("B")
    obj = cls()
    obj.process("Testdaten")

    abschließend



    Python verwendet abstrakte Kategorien

    kurze Antwort

    In Python,Nicht unbedingt erforderlichGeschrieben wie C++ oder Javaabstract class. Python übernimmt „Duck Typing“. Solange Objekte dieselben Methodennamen und Verhaltensweisen haben, können sie als kompatibel betrachtet werden.

    Beispiel für die Eingabe einer Ente

    Klasse AKlasse:
        def Prozess(Selbst, Daten):
            print(f"AClass processing: {data}")
    
    Klasse BKlasse:
        def Prozess(Selbst, Daten):
            print(f"BClass processing: {data}")
    
    def run(obj):
        obj.process("data") # Der Typ muss nicht angegeben werden, solange diese Methode vorhanden ist
    
    run(AClass())
    run(BClass())

    Ergebnisse ausgeben

    AKlassenverarbeitung: Daten
    BClass-Verarbeitung: Daten

    Situationen mit abstrakten Kategorien (ABC)

    Obwohl Python keine Typen erzwingt, können Sie diese verwenden, wenn Sie die Schnittstelle in der Teamentwicklung oder bei großen Projekten klar definieren möchtenabcMods.

    from abc import ABC, abstractmethod
    
    Klasse BaseClass(ABC):
        @abstractmethod
        def Prozess(Selbst, Daten):
            passieren
    
    Klasse AClass(BaseClass):
        def Prozess(Selbst, Daten):
            print(f"AClass processing: {data}")
    
    Klasse BClass(BaseClass):
        def Prozess(Selbst, Daten):
            print(f"BClass processing: {data}")
    
    # BaseClass() meldet einen Fehler, da die abstrakte Methode nicht implementiert ist

    abschließend



    Python-Module

    Definition

    In Python,Modulist eine Datei, die Programmcode enthält, normalerweise mit der Dateierweiterung.pyDas Ende. Module können Funktionen, Kategorien und Variablen definieren und auch ausführbaren Code enthalten, um die Wiederverwendung und Programmstrukturierung zu erleichtern.

    verwenden

    Verwendung

    Python überimportSchlüsselwort zur Einleitung des Moduls, zum Beispiel:

    Mathematik importieren
    
    print(math.sqrt(16)) # Ausgabe 4.0

    Benutzerdefinierte Module

    Entwickler können ihre eigenen Mods erstellen. Erstellen Sie beispielsweise einemymodule.py

    
    # mymodule.py
    def greet(name):
        return f"Hello, {name}!"
    

    Verwendung in einer anderen Programmdatei:

    
    import mymodule
    
    print(mymodule.greet("Alice"))
    

    Gemeinsame integrierte Gruppen



    Python-Suite

    Definition

    In Python,PaketEs ist eine Möglichkeit, Module zu organisieren. Ein Paket ist ein Verzeichnis, das mehrere Module enthält, was die Verwaltung und Wartung des Programms durch eine hierarchische Struktur erleichtert.

    Besonderheit

    grundlegendes Beispiel

    Erstellen Sie eine Datei mit dem NamenmypackageKit bestehend aus:

    
    mypackage/
    │── __init__.py
    │── module1.py
    └── module2.py
    

    module1.pyBeispiel:

    
    def add(a, b):
        return a + b
    

    module2.pyBeispiel:

    
    def multiply(a, b):
        return a * b
    

    Benutzen Sie das Kit

    importiere mein Paket.module1
    importiere mein Paket.module2
    
    print(mypackage.module1.add(2, 3)) # Ausgabe 5
    print(mypackage.module2.multiply(2, 3)) # Ausgabe 6

    Importieren Sie bestimmte Projekte aus einem Paket

    aus mypackage.module1 importieren hinzufügen
    aus mypackage.module2 importieren und multiplizieren
    
    print(add(10, 5)) # Ausgabe 15
    print(multiply(10, 5)) # Ausgabe 50

    Häufige Verwendungen



    Rufen Sie den aktuellen Paketnamen ab

    veranschaulichen

    In Python, um die aktuellen Module abzurufenPaketnamekönnen Sie spezielle Variablen verwenden__package__. Dies und__module__Das Konzept zum Abrufen des aktuellen Modulnamens ist ähnlich.

    Beispiel: Modul- und Kit-Struktur

    
    mypackage/
    │── __init__.py
    └── submodule.py
    

    submodule.pyInhalt:

    
    print("__name__:", __name__)
    print("__package__:", __package__)
    print("__module__:", __module__)
    

    Ausführungsergebnis

    Bei Verwendung in anderen Programmen alsimport mypackage.submoduleBeim Import sieht die Ausgabe ungefähr wie folgt aus:

    
    __name__: mypackage.submodule
    __package__: mypackage
    __module__: __main__
    

    erklären

    Anwendungsszenarien



    Python-Paketversion

    Es gibt zwei Möglichkeiten, die Version des Python-Pakets zu überprüfen: über das Terminal (Befehlszeile) oder durch die Ausführung im Python-Code. Dies kann Ihnen helfen zu bestätigen, ob die Umgebung den Projektanforderungen entspricht.


    1. Überprüfung über Terminal (Befehlszeile)

    Dies ist die schnellste Methode und erfordert keinen Aufruf der interaktiven Python-Umgebung.


    2. Checken Sie den Python-Code ein

    Wenn Sie die Version beim Ausführen des Programms ermitteln müssen, können Sie die folgenden zwei Methoden verwenden:


    3. Vergleichstabelle der Inspektionsmethoden

    Verfahren Anweisungen/Code Anwendbare Situationen
    Pip-Befehl pip show Zeigen Sie detaillierte Informationen wie Installationspfad, Autor, Abhängigkeiten usw. an.
    Pip-Liste pip list Verschaffen Sie sich einen schnellen Überblick über alle Pakete und Versionen in Ihrer aktuellen Umgebung.
    interne Eigenschaften .__version__ Treffen Sie logische Urteile, während das Skript ausgeführt wird.
    Metadata version() Standardisierte Methode zur Überprüfung, ohne die gesamte Suite zu laden.

    4. Überprüfen Sie Pythons eigene Version

    Manchmal liegt das Problem nicht bei der Suite, sondern beim Python-Interpreter selbst:


    5. Häufig gestellte Fragen und Erinnerungen



    Holen Sie sich den Paketnamen aus der Kategorie und dem Modulobjekt

    Klassenobjekt

    In Python kann über auf Klassenobjekte zugegriffen werdencls.__module__Suchen Sie den Namen des Moduls, das die Kategorie definiert, und verwenden Sie ihn dannsys.modulesHolen Sie sich das Modulobjekt und lesen Sie es schließlich__package__Eigenschaft zum Abrufen des Paketnamens.

    importsys
    
    # Angenommen, eine Kategorie ist in mypackage.submodule definiert
    classMyClass:
        passieren
    
    # Rufen Sie den Namen des Moduls ab, zu dem die Kategorie gehört
    module_name = MyClass.__module__
    print("Modulname:", Modulname)
    
    # Modulobjekt abrufen
    mod = sys.modules[Modulname]
    
    # Holen Sie sich den Paketnamen vom Modulobjekt
    print("Paketname:", mod.__package__)

    Modulobjekt

    Das Modul selbst ist ein Objekt und kann direkt aufgerufen werden__package__Eigentum.

    Mathematik importieren
    importiere mypackage.submodule als sub
    
    # math ist ein Standardfunktionsbibliotheksmodul, es gibt kein Paket, daher ist __package__ eine leere Zeichenfolge
    print("math.__package__:", math.__package__)
    
    # Module für kundenspezifische Kits
    print("sub.__package__:", sub.__package__)

    Beispiel für ein Ausführungsergebnis

    Modulname: mypackage.submodule
    Paketname: meinPaket
    math.__Paket__:
    sub.__package__: meinPaket

    abschließend



    inspect.getfile

    Wenn eine Python-Datei direkt ausgeführt wird, lautet ihr Modulname__main__. Dies erleichtert die Verwendungcls.__module__Der ursprüngliche Dateiname und -pfad konnte nicht abgerufen werden.

    Gehen Sie davon aus, dass Ihre Projektstruktur wie folgt aussieht:

    /Projekt
      |-- test_runner.py <-- Die Datei, die Sie direkt ausführen (wird als __main__ behandelt)
      |--test/
            |-- db_test.py <-- Datei, die DbCmdAgent definiert

    Wenn Sie den folgenden Code in „test_runner.py“ ausführen:

    aus test.db_test DbCmdAgent importieren
    agent_obj = DbCmdAgent(...) # Instanziierung
    
    # Zu diesem Zeitpunkt ist cls.__module__ immer noch „test.db_test“ (korrekter Modulname)

    Wenn Sie jedoch Kategorien in „test_runner.py“ definieren:

    # Inhalt von test_runner.py
    Klasse DbCmdAgent:
        passieren
    
    agent_obj = DbCmdAgent()
    #Zu diesem Zeitpunkt cls.__module__ == '__main__' (falscher Modulname)

    Dies zeigt an, dass die Klasse, für die Sie Informationen erhalten, in einer Datei definiert ist, die als „__main__“ ausgeführt wird.

    verwendeninspectDas Modul kann den Dateipfad direkt abrufen

    Unabhängig davon, ob die Kategorie in „__main__“ definiert ist, können Sie das Attribut „__module__“ umgehen und verwendeninspectModul, um den Quellcodedateipfad zu erhalten, der dieser Kategorie entspricht. Dies ist eine zuverlässigere und allgemeinere Methode.

    Python-korrigierte Implementierung

    Import prüfen
    Betriebssystem importieren
    
    # --- Simulationssituation: Kategorien definiert in __main__ (aktuell ausgeführtes Skript) ---
    
    Klasse DbCmdAgent:
        „““Diese Kategorie ist im aktuell ausgeführten Hauptskript definiert““
        def __init__(self, data):
            self.data = Daten
    
    agent_obj = DbCmdAgent("some_data")
    
    def get_class_location_robust(obj):
        „““
        Verwenden Sie inspect.getfile, um das __module__ == '__main__'-Problem zu umgehen.
        „““
        cls = Typ(obj)
        
        # 1. Verwenden Sie inspect.getfile(), um den Dateipfad abzurufen, der die Kategorie definiert
        Versuchen Sie:
            file_path = inspect.getfile(cls)
            
            # 2. Ermitteln Sie den Dateinamen und das Verzeichnis
            file_name = os.path.basename(file_path)
            Verzeichnis = os.path.dirname(file_path)
            py_name = os.path.splitext(file_name)[0]
            
            # 3. Wenn __module__ __main__ ist, ersetzen Sie es durch den Archivnamen, um mehr Kontext bereitzustellen
            module_name = cls.__module__
            if module_name == '__main__':
                module_name = py_name # Verwenden Sie db_test oder test_runner als Kontext
                
        außerTypeError:
            # Behandelt integrierte Typen
            file_path = „N/A (integriert oder C-Erweiterung)“
            file_name = „N/A“
            Verzeichnis = „N/A“
            py_name = "N/A"
            module_name = cls.__module__
            
        zurück {
            „module_name_or_main“: Modulname,
            "py_name_no_ext": py_name,
            „Verzeichnis“: Verzeichnis,
            "file_path": file_path,
        }
    
    # Ausführen und Ergebnisse anzeigen
    location_info = get_class_location_robust(agent_obj)
    
    print("--- Informationen zur Kategoriedefinitionsdatei ---")
    print(f"Dateiname (.py-Name): {location_info['py_name_no_ext']}")
    print(f"Verzeichnispfad (Paket): {location_info['directory']}")
    print(f"Vollständiger Dateipfad: {location_info['file_path']}")

    4. Zusammenfassung der wichtigsten Punkte



    Dynamisches Importmodul

    Funktionsbeschreibung

    Diese Methode verwendetimportlib.import_moduleVersuchen Sie, das angegebene Modul zu importieren. Wenn Sie stoßenModuleNotFoundError, wird versuchen, seine Submodule aus dem aktuell geladenen Paket zu importieren.

    Programmbeispiel

    import importlib
    importsys
    
    def safe_import(module_name):
        Versuchen Sie:
            # Versuchen Sie, direkt zu importieren
            return importlib.import_module(module_name)
        außer ModuleNotFoundError:
            # Wenn dies fehlschlägt, versuchen Sie, das Submodul aus einem bekannten Paket zu importieren
            für pkg in list(sys.modules.keys()):
                wenn pkg und nicht pkg.startswith("_"):
                    Versuchen Sie:
                        return importlib.import_module(f"{pkg}.{module_name}")
                    außer ModuleNotFoundError:
                        weitermachen
            raise # Wenn immer noch nicht gefunden, eine Ausnahme auslösen

    Anwendungsbeispiele

    Numpy importieren
    
    mod1 = safe_import("random") # Es kann direkt erfolgreich sein, da es sich um eine Standardbibliothek handelt
    mod2 = safe_import("linalg") # Werde numpy.linalg ausprobieren
    print(mod2.__name__) # Ausgabe numpy.linalg

    veranschaulichen



    Suchpfad des Python-Moduls: Zusammensetzung von sys.path

    In Python,sys.pathist eine Liste mit allen Verzeichnispfaden, die der Python-Interpreter der Reihe nach durchsucht, wenn er versucht, ein Modul zu importieren. Wenn Sie ausführenimport some_module, Python wird der Reihe nach prüfensys.pathjedes Verzeichnis in der Liste, bis Sie ein Verzeichnis mit dem Namen findensome_moduleDateien (z.B.some_module.pysome_module/__init__.pyWarten).

    Die drei Hauptkomponenten von sys.path

    sys.pathListen bestehen normalerweise aus den folgenden drei Teilen und werden in der folgenden Reihenfolge durchsucht:

    1. Das Eingabeverzeichnis (Eingabepunkt) des Programmcodes

    2. PYTHONPATH-Umgebungsvariable

    3. Standardfunktionsbibliothek und Installationsverzeichnis

    ---

    Systemvariablen im Zusammenhang mit sys.path

    Zusätzlich zu den oben genanntenPYTHONPATHDarüber hinaus gibt es mehrere Umgebungsvariablen im Zusammenhang mit der Python-Ausführungsumgebung, die sich auf das Verhalten des Interpreters und die Pfadfindung auswirkensys.pathDie Hauptvariablen, aus denen sich das zusammensetztPYTHONPATH

    Systemvariablen Funktionsbeschreibung Beziehung zu sys.path
    PYTHONPATH Definiert zusätzliche Verzeichnisse, die dem Mod-Suchpfad hinzugefügt werden sollen. direkte Wirkungsys.pathZusammensetzung.
    PYTHONHOME Wird verwendet, um einen alternativen Pfad zum Python-Installationsverzeichnis festzulegen, insbesondere für eingebettete Systeme. Beeinflusst indirekt die Standardbibliothek undsite-packagesStandort.
    PATH Wird vom Betriebssystem verwendet, um ausführbare Dateien zu finden (z. B.python.exe) Weg. wirkt sich nicht direkt aussys.path, beeinflusst aber, welcher Python-Interpreter ausgeführt wird.
    VIRTUAL_ENV Wenn Sie sich in einer virtuellen Umgebung befinden, verweist diese Variable auf das Stammverzeichnis der virtuellen Umgebung. indirekte Wirkungsys.path, wie es sicherstelltsite-packagesEs kommt eher aus der virtuellen Umgebung als aus dem gesamten System.

    So ändern Sie sys.path

    Weilsys.pathist eine gewöhnliche Python-Liste, die Sie dynamisch ändern können, während das Programm ausgeführt wird. Solche Änderungen werden jedoch nur innerhalb der aktuellen Interpretersitzung wirksam:

    importsys
    Betriebssystem importieren
    
    # Fügen Sie das übergeordnete Verzeichnis zum Suchpfad hinzu (wird häufig zum Testen oder als interne Projektreferenz verwendet).
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))


    Mod Shadow

    Module Shadowing (oder Name Shadowing) ist ein häufiger Fehler oder Programmierproblem in Python. Es tritt auf, wenn Sie versehentlich eine Codedatei oder einen Variablennamen erstellen, der mit dem Namen eines integrierten Moduls oder einer Drittanbieterbibliothek, die Sie importieren oder verwenden möchten, in Konflikt steht.

    1. Definition und Entstehungsursachen

    Das Ergebnis davon ist, dass Ihre lokale Datei das Standardmodul, das geladen werden soll, „überdeckt“ oder „überschreibt“, sodass Ihr Code nicht auf Standardmodulfunktionen zugreifen kann (z. Bsocket.AF_UNSPEC) schlägt fehl, da die von Ihnen geladene lokale Datei nicht über diese Eigenschaften verfügt.

    2. Häufige Beispiele

    Standardmodulname Der lokale Dateiname, der den Schatten verursacht hat als Ergebnis
    socket socket.py Standard kann nicht verwendet werdensocketDie Netzwerkkonstanten des Moduls (z. BAF_INET, AI_PASSIVE)。
    json json.py Standard kann nicht verwendet werdenjsonModularloadsoderdumpsFunktion.
    test(Projektname) test.py In einer Unit-Testumgebung kann es zu Konflikten mit der internen Logik des Test-Frameworks kommen.

    3. Lösung

    1. Archiv umbenennen: Dies ist die einfachste und effektivste Lösung. Benennen Sie einfach lokale Dateien oder Verzeichnisse um, die mit Standardmodul- oder Bibliotheksnamen in Konflikt stehen. Zum Beispiel ändernsocket.pyumbenanntnetwork_handler.py
    2. Überprüfen Sie sys.path: Tun Sie dies in Ihrem Codeimport sys; print(sys.path)Überprüfen Sie den Suchpfad von Python, um festzustellen, ob Ihre lokalen Dateien anstelle des Standardbibliotheksverzeichnisses geladen werden.
    3. Verwenden Sie eine virtuelle Umgebung: Eine virtuelle Umgebung allein verhindert zwar nicht die Spiegelung lokaler Archive, kann aber sicherstellen, dass von Ihnen installierte Pakete von Drittanbietern nicht mit anderen Umgebungen in Konflikt geraten.


    Rufen Sie den .py-Namen des aktuellen Eintrags ab

    veranschaulichen

    Um die aktuelle Ausführung des Python-Programms abzurufen__main__Der Name der .py-Datei, zu der es gehört und die verwendet werden kann__main__.__file__odersys.argv[0]. Aber im interaktiven Modus, Jupyter, oder-cMöglicherweise ist es zum Zeitpunkt der Ausführung noch nicht vorhanden und erfordert daher eine sichere Handhabung.

    Holen Sie sich den aktuellen Namen der .py-Hauptdatei (sichere Version)

    Betriebssystem importieren
    importsys
    __main__ importieren
    
    def get_main_py_path():
        """Gibt den absoluten Pfad von .py zurück, zu dem main gehört. Wenn es nicht gefunden werden kann, wird None zurückgegeben"""
    
        # Fall 1: Normale Ausführung von .py
        main_file = getattr(__main__, "__file__", None)
        wenn main_file:
            return os.path.abspath(main_file)
    
        # Fall 2: Urteil von sys.argv[0]
        wenn len(sys.argv) > 0:
            argv0 = sys.argv[0]
            wenn argv0 nicht in ("", "-c", ""):
                Kandidat = os.path.abspath(argv0)
                wenn os.path.exists(candidate):
                    Rückkehrkandidat
    
        # Fall 3: Interaktiver Modus, Jupyter, Einbetten usw.
        return Keine
    
    # Beispiel
    path = get_main_py_path()
    wenn Pfad:
        print("Hauptpfad:", Pfad)
        print("Hauptdateiname:", os.path.basename(path))
    sonst:
        print("main.py nicht gefunden (vielleicht in interaktiver Umgebung oder nicht aus dem Archiv ausgeführt)")

    Nur der Dateiname (Basisname)

    path = get_main_py_path()
    filename = os.path.basename(path) if path else None
    print(filename)

    Zusammenfassen



    Rufen Sie die Parameternamen und -werte der aktuellen Funktion ab

    To get the parameter names and their corresponding values of a function in Python, you can use the `inspect` module, which provides introspection utilities. Specifically, `inspect.signature()` can help you retrieve the names of the parameters, and you can pass the current frame's local variables to get their values.
    
    Here is an example that demonstrates how to get the function name, parameter names, and their values:
    
    ```python
    import inspect
    
    # Sample function
    def my_function(a, b, c=5):
        # Get the current frame
        frame = inspect.currentframe()
        
        # Get the function name
        func_name = frame.f_code.co_name
        print(f"Function name: {func_name}")
        
        # Get the parameter names and their values
        args, _, _, values = inspect.getargvalues(frame)
        
        # Print parameter names and values
        for arg in args:
            print(f"Parameter name: {arg}, Value: {values[arg]}")
    
    # Call the function
    my_function(1, 2)
    ```
    
    ### Output:
    ```
    Function name: my_function
    Parameter name: a, Value: 1
    Parameter name: b, Value: 2
    Parameter name: c, Value: 5
    ```
    
    ### Explanation:
    1. **`inspect.currentframe()`**: Retrieves the current execution frame.
    2. **`frame.f_code.co_name`**: Extracts the name of the current function.
    3. **`inspect.getargvalues(frame)`**: Gets the argument names and their corresponding values from the frame. This function returns a tuple containing:
       - `args`: List of argument names.
       - `_`: Placeholder for unused information.
       - `values`: Dictionary containing argument names as keys and their values.
    
    This allows you to print both the names of the function's parameters and their values at runtime.
    


    Rufen Sie den Typ des Funktionsparameters ab

    Verwendung des Inspektionsmoduls

    In Python können Sie verwendeninspect.signature()Informationen zu Funktionsparametern abrufen, und weiter wegParameter.annotationDie Eigenschaft erhält für jeden Parameter die Typanmerkung (Typhinweis).

    Import prüfen
    
    def my_function(a: int, b: str, c: float = 3.14) -> bool:
        return str(a) == b
    
    sig = inspect.signature(my_function)
    
    für Name, Parameter in sig.parameters.items():
        print(f"Parametername: {name}")
        print(f"Standardwert: {param.default}")
        print(f"Typanmerkung: {param.annotation}")
        print()

    Ergebnisse ausgeben

    Parametername: a
      Standard: <class 'inspect._empty'>
      Typanmerkung: <class 'int'>
    
    Parametername: b
      Standard: <class 'inspect._empty'>
      Typanmerkung: <class 'str'>
    
    Parametername: c
      Standard: 3.14
      Typanmerkung: <class 'float'>

    veranschaulichen

    Verwenden Sie get_type_hints

    Diese Methode löst Vorwärtsverweise (als Zeichenfolgen markierte Typen) automatisch auf.

    
    from typing import get_type_hints
    
    hints = get_type_hints(my_function)
    print(hints)
    

    Ergebnisse ausgeben

    
    {'a': <class 'int'>, 'b': <class 'str'>, 'c': <class 'float'>, 'return': <class 'bool'>}
    

    Zusammenfassen



    Rufen Sie den Klassennamen des Objekts ab

    veranschaulichen

    In Python können Sie die Objekte verwenden__class__Attribut bzwtype()Funktion, Rufen Sie die Kategorie (Klasse) ab, zu der es gehört, und rufen Sie dann den Kategorienamen ab.

    Beispiel

    Klasse Tier:
        passieren
    
    Klasse Hund (Tier):
        passieren
    
    obj = Hund()
    
    #Methode 1: Verwenden Sie __class__.__name__
    print(obj.__class__.__name__) # Ausgabe: Hund
    
    #Methode 2: Verwenden Sie type()
    print(type(obj).__name__) # Ausgabe: Hund
    
    #Methode 3: Holen Sie sich den vollständigen Modul- und Kategorienamen
    print(obj.__class__) # Ausgabe: <class '__main__.Dog'>
    print(obj.__class__.__module__) # Ausgabe: __main__

    Ergebnisse ausgeben

    
    Dog
    Dog
    <class '__main__.Dog'>
    __main__
    

    veranschaulichen

    Erweiterte Anwendungen

    Um gleichzeitig den vollständigen „Modul- und Kategorienamen“ zu erhalten, können Sie Folgendes schreiben:

    
    cls = type(obj)
    full_name = f"{cls.__module__}.{cls.__name__}"
    print(full_name)
    

    Ergebnisse ausgeben

    
    __main__.Dog
    

    Zusammenfassen



    Ermitteln Sie die Kategorie, zu der das Attribut gehört

    Im Folgenden finden Sie Beispielcode, der mithilfe von Python ermittelt, zu welcher Vererbungsklasse eine Eigenschaft gehört:

    Beispielcode

    Import prüfen
    
    Klasse BaseClass:
        base_attr = „Ich bin ein Attribut von BaseClass“
    
    Klasse SubClass(BaseClass):
        sub_attr = „Ich bin ein Attribut aus SubClass“
    
    # Definieren Sie eine Funktion, um die Kategorie zu finden, zu der ein Attribut gehört
    def find_attribute_owner(cls, attr_name):
        für Basis in inspect.getmro(cls): # MRO abrufen (Reihenfolge der Methodenauflösung)
            wenn attr_name in base.__dict__:
                Rückkehrbasis
        return Keine
    
    # Test
    sub_obj = SubClass()
    attributes = sub_obj.__class__.__dict__.items() # Alle Attribute auf Kategorieebene abrufen
    für Name, Wert in Attributen:
        Eigentümer = find_attribute_owner(sub_obj.__class__, Name)
        print(f"Attribut '{name}' gehört zur Kategorie: {owner.__name__}")

    Programmbeschreibung

    Ausführungsergebnis

    Für die Kategorien im Beispiel lauten die Ausführungsergebnisse wie folgt:

    Das Attribut „__module__“ gehört zur Klasse: SubClass
    Das Attribut „sub_attr“ gehört zur Klasse: SubClass
    Das Attribut „__doc__“ gehört zur Klasse: SubClass
    Das Attribut „base_attr“ gehört zur Klasse: BaseClass


    Funktionsanmerkung abrufen (Docstring)

    Verwenden Sie __doc__

    class MyClass:
        def fun1(self):
            '''
            Fun1 comment
            '''
            pass
    
    obj = MyClass()
    print(obj.fun1.__doc__)
    

    Verwendung des Inspektionsmoduls

    import inspect
    
    class MyClass:
        def fun1(self):
            '''
            Fun1 comment
            '''
            pass
    
    print(inspect.getdoc(MyClass.fun1))
    


    Funktion als veraltet markiert

    Verwenden des Warnungsmoduls

    In Python können Sie die integrierte Funktion verwendenwarningsModule, die Benutzer zur Ausführungszeit (und nicht zur Kompilierungszeit) darauf aufmerksam machen, dass eine Funktion veraltet ist, und neue Alternativen vorschlagen.

    Warnungen importieren
    
    def old_function(x, y):
        warnings.warn(
            „Die Funktion old_function() ist veraltet, bitte verwenden Sie stattdessen new_function(x, y).“,
            Kategorie=DeprecationWarning,
            Stapelebene=2
        )
        gib x + y zurück
    
    def neue_Funktion(x, y):
        gib x + y zurück

    Ausführungsbeispiel

    
    result = old_function(3, 4)
    print(result)
    

    Ergebnisse ausgeben

    DeprecationWarning: Die Funktion old_function() ist veraltet. Bitte verwenden Sie stattdessen new_function(x, y).
      Ergebnis = alte_Funktion(3, 4)
    7

    Weitere Informationen

    Erweitert: Erstellen Sie einen Dekorator, um veraltete Funktionen automatisch zu markieren

    Dekoratoren können verwendet werden, um zu ermöglichen, dass mehrere alte Funktionen die gleiche Veraltungsaufforderungslogik verwenden:

    Warnungen importieren
    von functools Import Wraps
    
    definitiv veraltet (new_func_name):
        def decorator(func):
            @wraps(func)
            def wrapper(*args, **kwargs):
                warnings.warn(
                    f „Funktion {func.__name__}() ist veraltet, bitte verwenden Sie stattdessen {new_func_name}().“,
                    Kategorie=DeprecationWarning,
                    Stapelebene=2
                )
                return func(*args, **kwargs)
            Rückumschlag
        zurück Dekorateur
    
    @deprecated("new_function")
    def old_function(x, y):
        gib x + y zurück


    Der Unterschied zwischen @staticmethod und @classmethod

    In Python,@staticmethodUnd@classmethodBeide Dekoratoren können Methoden definieren, die aufgerufen werden können, ohne die Klasse zu instanziieren, aber ihr Zweck und ihr Verhalten unterscheiden sich.

    @staticmethod

    @staticmethod-Beispiel:

    Klasse MyClass:
        @staticmethod
        def static_method(x, y):
            gib x + y zurück
    
    # Statische Methoden können aufgerufen werden, ohne eine Instanz zu erstellen
    result = MyClass.static_method(5, 10) # Ergebnis: 15

    Fokus@staticmethodAuf die Kategorie kann nicht zugegriffen werden (cls) oder Instanz (self)。

    @classmethod

    @classmethod-Beispiel:

    Klasse MyClass:
        class_variable = 0
    
        def __init__(self, value):
            self.value = Wert
            MyClass.class_variable += 1
    
        @classmethod
        def get_class_variable(cls):
            cls.class_variable zurückgeben
    
    #Instanz erstellen
    obj1 = MyClass(10)
    obj2 = MyClass(20)
    
    # Kategoriemethode aufrufen
    print(MyClass.get_class_variable()) # Ergebnis: 2

    Fokus@classmethodKann auf den Status auf Kategorieebene zugreifen (cls)。

    Zusammenfassen

    Besonderheit @staticmethod @classmethod
    erster Parameter Kein implizites erstes Argument cls(Kategorie selbst)
    Zugriffsinstanz keiner keiner
    Zugriffskategorie keiner haben
    Verwendung Hilfsfunktionen, die sich auf Kategorien beziehen, aber keine Instanzen oder Kategorien erfordern Sie müssen Daten auf Kategorieebene manipulieren oder alternative Konstruktoren bereitstellen


    Die statische Klasse führt die Initialisierung durch

    Python selbst bietet keine „statische Standardmethode“ oder „Standardklassenmethode“, d. h. die Funktion, eine Methode beim ersten Aufruf einer statischen oder Klassenmethode automatisch auszuführen. Aber wir können ein ähnliches Verhalten durch Lazy-Loading-Techniken erreichen.

    Lösung: Verwenden Sie statische Variablen und Lazy Loading

    Sie können eine statische Variable in der Klasse definieren, um den Initialisierungsstatus zu verfolgen, und dann die Initialisierungslogik ausführen, wenn die statische Methode oder die Klassenmethode zum ersten Mal aufgerufen wird.

    Beispiel:

    Klasse MyClass:
        initialized = False # Statische Variable, die verfolgt, ob sie initialisiert wurde
    
        @staticmethod
        def init_once():
            wenn nicht MyClass.initialized:
                print("Ausführung der Initialisierungslogik ...")
                MyClass.initialized = True
    
        @classmethod
        def class_method(cls):
            cls.init_once()
            print("Klassenmethode aufrufen")
    
        @staticmethod
        def static_method():
            MyClass.init_once()
            print("Statische Methode aufrufen")
    
    # Rufen Sie die Kategoriemethode zum ersten Mal auf, um die Initialisierung auszulösen
    MyClass.class_method() # Ausgabe: Ausführung der Initialisierungslogik...Klassenmethode aufrufen
    
    # Rufen Sie die Kategoriemethode zum zweiten Mal auf und führen Sie keine Initialisierung mehr durch
    MyClass.class_method() # Ausgabe: Klassenmethode aufrufen
    
    # Beim ersten Aufruf der statischen Methode wird keine Initialisierung durchgeführt, da sie bereits initialisiert wurde.
    MyClass.static_method() # Ausgabe: Statische Methode aufrufen

    So funktioniert es:

    Zusammenfassen

    Obwohl Python nicht über eine integrierte „statische Standardmethode“ oder „Standardklassenmethode“ verfügt, können Sie durch die Verwendung statischer Variablen und Lazy-Loading-Techniken die Initialisierungslogik automatisch ausführen, wenn die statische Methode oder Klassenmethode zum ersten Mal aufgerufen wird, und sicherstellen, dass diese Logik nur einmal ausgeführt wird.



    Python-Thread

    In Python ist Thread ein Mechanismus zur Implementierung der Parallelität. Es ermöglicht einem Programm, mehrere Aufgaben gleichzeitig innerhalb eines einzigen Prozesses (Prozesses) auszuführen. Dies ist sehr nützlich für die Durchführung von E/A-intensiven Vorgängen (z. B. Netzwerkkommunikation, Lesen und Schreiben von Dateien) und kann verhindern, dass das Programm blockiert (Blockierung) und auf den Abschluss externer Vorgänge wartet.

    1. Warum Threads verwenden?

    2. Python-Thread-Einschränkungen: GIL (Global Interpreter Lock)

    Im Standard-CPython-Interpreter gibt es eine „Global Interpreter Lock“ (Global Interpreter Lock, GIL). Die GIL stellt sicher, dass jeweils nur ein Thread Python-Bitcode ausführen kann. Das heisst:

    3. Ausführungs-Thread-Modul:threading

    Python verwendet die StandardfunktionsbibliothekthreadingModul zur Verarbeitung von Ausführungsthreads. Es gibt zwei Hauptmethoden zur Thread-Erstellung:

    Methode 1: Funktion als Ziel übergeben (Zielfunktion)

    Dies ist die einfachste und gebräuchlichste Verwendung.

    Threading importieren
    Importzeit
    
    def task(name, Verzögerung):
        „““Aufgabenfunktion, die vom Thread ausgeführt werden soll““
        print(f"Thread {name}: Startet ...")
        time.sleep(delay) # Simulieren Sie zeitaufwändige E/A-Vorgänge
        print(f"Thread {name}: Aufgabe abgeschlossen.")
    
    #Ausführungsthread erstellen
    thread1 = threading.Thread(target=task, args=("T1", 2))
    thread2 = threading.Thread(target=task, args=("T2", 4))
    
    # Starten Sie den Thread
    thread1.start()
    thread2.start()
    
    # Warten Sie, bis alle Threads abgeschlossen sind (blockieren Sie den Hauptthread, bis sie fertig sind)
    thread1.join()
    thread2.join()
    
    print("Alle Ausführungsthreads wurden abgeschlossen. Das Hauptprogramm wird beendet.")

    Methode 2: Vererbungthreading.ThreadKategorie

    Geeignet für komplexere Szenarien, indem die Logik des Ausführungsthreads in einer Kategorie gekapselt wird.

    Threading importieren
    Importzeit
    
    Klasse MyThread(threading.Thread):
        def __init__(selbst, Name, Verzögerung):
            super().__init__()
            self.name = Name
            self.delay = Verzögerung
    
        def run(self):
            „““
            Wenn der Thread startet, wird die run()-Methode automatisch aufgerufen.
            Hier definieren Sie die Aufgaben, die der Thread ausführen soll.
            „““
            print(f"Thread {self.name}: Starting...")
            time.sleep(self.delay)
            print(f"Thread {self.name}: Aufgabe abgeschlossen.")
    
    #Erstelle und starte den Thread
    thread3 = MyThread("T3", 3)
    thread3.start()
    thread3.join()
    
    print("Der benutzerdefinierte Ausführungsthread wurde abgeschlossen.")

    4. Thread-Synchronisierung und Datenaustausch

    Wenn mehrere Threads auf gemeinsam genutzte Daten zugreifen und diese ändern, kann es zu Race Conditions kommen. Sie müssen einen Synchronisierungsmechanismus verwenden, um Ihre Daten zu schützen:

    Verwendung eines Sperrbeispiels

    Threading importieren
    
    # Gemeinsame Ressourcen
    Zähler = 0
    # Sperre erstellen
    lock = threading.Lock()
    
    def increment_counter():
        globaler Zähler
        # Erhalten Sie die Sperre, um sicherzustellen, dass nur ein Thread diesen Block gleichzeitig ausführen kann
        lock.acquire()
        Versuchen Sie:
            # Wettbewerbsbereich
            current_value = Zähler
            time.sleep(0.001) # Schalten simulieren
            Zähler = aktueller_Wert + 1
        schließlich:
            # Sperre aufheben
            lock.release()
    
    Threads = []
    für i im Bereich(100):
        t = threading.Thread(target=increment_counter)
        threads.append(t)
        t.start()
    
    für t in Threads:
        t.join()
    
    print(f"Endgültiger Zählerwert: {counter}") # Wenn keine Sperre vorhanden ist, beträgt dieser Wert möglicherweise nicht 100


    Starten, Synchronisieren und Stoppen von Python-Threads

    PythonthreadingDas Modul bietet die Funktion zum Erstellen und Verwalten von Ausführungsthreads. Aufgrund von Einschränkungen des Betriebssystems und der Designphilosophie bietet Python jedoch keine sichere, direkte und erzwungene Methode zum Stoppen (Töten) externer Ausführungsthreads. Ein erzwungenes Stoppen kann zu Ressourcenverlust oder Datenbeschädigung führen.

    Daher muss das Stoppen des Ausführungsthreads durch einen **kooperativen Mechanismus**** erreicht werden, d. h. indem der Ausführungsthread selbst ein Stoppflag überprüft und ordnungsgemäß beendet wird.

    1. Thread-Stoppmechanismus: Verwendung von Flags (Flag)

    Dies ist die sicherste und am meisten empfohlene Methode zum Stoppen von Threads. Es erfordert, dass der Thread in der Schleife der Ausführung der Aufgabe regelmäßig eine externe Variable (Flag) überprüft.

    Beispiele für Python-Implementierungen

    Threading importieren
    Importzeit
    
    # Gemeinsames Stopp-Flag
    stop_flag = threading.Event()
    
    defmonitored_task(name,verzögerung):
        „““
        Eine Aufgabenfunktion, die das Stoppflag regelmäßig überprüft
        „““
        print(f"Thread {name}: Startet ...")
        ich = 0
        while not stop_flag.is_set(): # Überprüfen Sie, ob das Flag gesetzt ist
            ich += 1
            print(f"Thread {name}: Ausführungsschritt {i}")
            
            # Simulieren Sie zeitaufwändige Vorgänge und überprüfen Sie sie regelmäßig
            time.sleep(Verzögerung)
            
            # Hier können Sie die Anzahl der Ausführungen begrenzen, um sicherzustellen, dass keine Endlosschleife entsteht
            wenn i >= 5:
                Pause
                
        print(f"Ausführungsthread {Name}: hat ein Stoppsignal erhalten oder die Aufgabe wurde beendet und ordnungsgemäß beendet.")
    
    # --- Hauptprogramm-Steuerblock ---
    
    #Ausführungsthread erstellen
    worker_thread = threading.Thread(target=monitored_task, args=("Worker-1", 1))
    
    # Starten Sie den Thread
    worker_thread.start()
    
    print("\nHauptprogramm: Der Ausführungsthread wurde gestartet, warte 3 Sekunden...\n")
    time.sleep(3) # Lassen Sie den Thread eine Weile laufen
    
    # Stoppsignal senden
    print("\nHauptprogramm: Stopp-Flag setzen...\n")
    stop_flag.set() # Event setzen und is_set() True zurückgeben lassen
    
    # Warten Sie, bis der Thread ordnungsgemäß beendet ist, und beenden Sie ihn (normalerweise schnell).
    worker_thread.join()
    
    print("\nHauptprogramm: Der Thread wurde sicher gestoppt und beigetreten. Das Programm wurde beendet.")

    2. Beschreibung der Schlüsselkomponenten

    3. Andere Stoppmechanismen (Zwangsstopp wird nicht empfohlen)

    Obwohl es einige experimentelle oder unsichere Möglichkeiten gibt, einen Stopp zu erzwingen, wie z. B. die Verwendung von „_thread.stop()“ oder das Auslösen einer Ausnahme, können diese Methoden Folgendes verursachen:

    Daher sollten Sie in Python immer einen koordinierten Flagging-Mechanismus verwenden, um Threads zu stoppen.



    Lösung für Multithread-Shared-Object-Konflikte

    1. Die am häufigsten verwendete Lösung: Thread-Local Storage

    Dies ist der am meisten empfohlene Ansatz in Multithread-Umgebungen. Anstatt dass alle Threads dasselbe Objekt erfassen, verfügt jeder Thread über eine unabhängige Kopie des Objekts. In Python können Sie verwendenthreading.local()zu erreichen.

    Threading importieren
    
    # Erstellen Sie einen Thread-Bereich zum Speichern von Objekten
    thread_data = threading.local()
    
    def get_service():
        # Wenn der aktuelle Thread keinen eigenen Dienst hat, erstellen Sie einen
        wenn nicht hasattr(thread_data, 'service'):
            print(f"Erstelle eine neue Verbindung für Thread {threading.current_thread().name}")
            thread_data.service = create_new_connection()
        Geben Sie thread_data.service zurück
    
    def task():
        service = get_service()
        # Operationen ausführen...

    2. Die am zweithäufigsten verwendete Methode: Verriegelungsmechanismus (Verriegelung)

    Wenn das Objekt identisch sein muss (z. B. in dieselbe Datei schreiben oder mit demselben globalen Zähler arbeiten), müssen Sie es verwendenLock. Dadurch wird sichergestellt, dass nur ein Thread gleichzeitig auf das Objekt zugreifen kann, wodurch Race Conditions vermieden werden.

    lock = threading.Lock()
    
    def safe_task():
        mit Schloss:
            # Innerhalb dieses Blocks müssen andere Threads warten
            shared_object.do_something()
    ---

    Alternativen zum Multithreading: Asynchron und Multiprocessing

    Wenn Sie das Risiko von Sperrenkonflikten oder Abstürzen vermeiden möchten, die mit mehreren Threads einhergehen, gibt es zwei Hauptalternativen, die Sie in Betracht ziehen sollten:

    1. Asynchrone Coroutinen (Asyncio) – geeignet für I/O-intensive Aufgaben

    Dies ist derzeit der beliebteste Ansatz in Python (z. B. das Kernprinzip von FastAPI). Es läuft innerhalb eines einzelnen Threads und wartet auf E/A (z. B. API-Anfragen, Datenbankabfragen), indem es Aufgaben wechselt.

    Asynchron importieren
    
    async def fetch_api(url):
        # Verwenden Sie asynchrone Bibliotheken wie aiohttp
        Antwort = Warten auf call_api(url)
        Antwort zurückgeben
    
    async def main():
        # Führen Sie mehrere Aufgaben gleichzeitig aus, wechseln Sie jedoch innerhalb eines einzelnen Threads
        Ergebnisse = Warten auf asyncio.gather(fetch_api("url1"), fetch_api("url2"))

    2. Multiprocessing – geeignet für rechenintensive Aufgaben

    Der Ausführungsthread von Python ist durch GIL (Global Interpreter Lock) eingeschränkt und kann Vorgänge nicht wirklich parallelisieren.multiprocessingEs werden mehrere unabhängige Python-Interpreter-Instanzen geöffnet.

    aus dem Multiprocessing-Importprozess
    
    def task(name):
        print(f"Prozess {Name} wird ausgeführt")
    
    if __name__ == "__main__":
        p = Process(target=task, args=('A',))
        p.start()
        p.join()

    3. Aufgabenwarteschlange – geeignet für verteilte Verarbeitung

    Wenn Sie Aufgaben vollständig entkoppeln möchten, können Sie Celery oder Redis Queue verwenden. Legen Sie die Aufgabe in die Warteschlange und lassen Sie sie vom Back-End-Worker (bei dem es sich um mehrere Prozesse oder mehrere Maschinen handeln kann) abholen und ausführen.

    ---

    Zusammenfassende Vorschläge

    planen Lösung Anwendbare Situationen
    Thread-Local Jeder Thread erhält eine Kopie API-Service, Datenbankanbindung
    Asyncio Single-Thread-Switching (nicht synchron) Hohe gleichzeitige Netzwerkanforderungen (empfohlen)
    Multiprocessing unabhängiger Speicherplatz CPU-Computing, wodurch Freigabekonflikte vollständig vermieden werden


    Balance zwischen Thread-Bereichsspeicherung und Informationsaustausch

    Kernkonzepte

    Wenn Sie Thread-Local Storage (TLS) verwenden, besteht der Zweck darin, diese „nicht threadsicheren“ Objekte (z. B. API-Service, Datenbankverbindungen) zu schützen. Wenn jedoch Daten zwischen Threads ausgetauscht werden müssen (z. B. müssen die von Thread A heruntergeladenen Ergebnisse von Thread B verarbeitet werden), müssen Sie einen speziellen „Kommunikationskanal“ einrichten.

    1. Verwenden Sie threadsichere Warteschlangen (Queue) – am meisten empfohlen

    Pythonqueue.QueueIst threadsicher. Dies ist die standardmäßigste und sicherste Methode zum Übertragen von Informationen zwischen Threads. Die gesamte Sperrlogik wurde bereits intern verarbeitet.

    Threading importieren
    Importwarteschlange
    
    # Erstellen Sie eine globale Warteschlange, auf die alle Ausführungsthreads zugreifen können
    task_queue = queue.Queue()
    
    def Produzent():
        # Daten produzieren und in die Warteschlange stellen
        data = {"video_id": "abc", "status": "pending"}
        task_queue.put(data)
    
    def Consumer():
        # Daten aus der Warteschlange abrufen
        data = task_queue.get()
        # Daten verarbeiten...
        task_queue.task_done()

    2. Verwenden Sie Thread-Sicherheitsvariablen (z. B. gemeinsame Listensperre).

    Wenn Sie eine große Liste oder ein großes Wörterbuch freigeben müssen, können Sie allgemeine globale Variablen verwenden, der Zugriff auf sie muss jedoch über einen Abgleich erfolgenthreading.Lock

    shared_results = []
    results_lock = threading.Lock()
    
    def task():
        result = „Einige Operationsergebnisse“
        
        #Vor dem Zugriff auf freigegebene Ressourcen sperren
        mit results_lock:
            shared_results.append(result)
        # Nach Verlassen des With-Blocks automatisch entsperren

    3. Verwenden Sie Ereignis- oder Bedingungsobjekte (Signalsynchronisierung).

    Manchmal möchten Sie nicht „Daten“, sondern „Status“ teilen (zum Beispiel: anderen Threads mitteilen, dass die API initialisiert wurde).

    api_ready = threading.Event()
    
    def initializer():
        #Initialisierung durchführen
        api_ready.set() # Signal senden
    
    def worker():
        api_ready.wait() # Warten Sie auf das Signal, bis der Initialisierer set() aufruft
        print("Beginne zu arbeiten")

    Zusammenfassung: Regionale Speicherung im Vergleich zu gemeinsam genutzten Informationen

    Inhaltstyp Speicherort Führungsstil
    Werkzeugobjekte(API, DB-Verbindung) Thread-Local (Region) Jeder hat eine Kopie, um Abstürze zu vermeiden.
    Missionsinformationen(ID, Parameter) Warteschlange (global) Verwenden Sie die Thread-sichere Warteschlangenübergabe.
    Berechnungsergebnis(Statistiken) Globale Liste/Dikt (global) Muss übereinstimmenthreading.Lock

    Um es einfach auszudrücken: ** „Besorgen Sie sich die privaten Tools (Verbindungen) selbst und holen Sie sich die öffentlichen Informationen (Daten) in der Warteschlange (Warteschlange/Sperre).“**



    Gewindesperre

    Grundlegende Konzepte

    Wenn in einer Multithread-Umgebung mehrere Threads gleichzeitig versuchen, dieselbe globale Variable oder gemeinsam genutzte Ressource (z. B. eine Datei, eine Datenbankverbindung oder eine globale Liste) zu ändern, tritt ein Fehler auf.Rennbedingung, was zu Datenverwirrung führt.threading.LockIst ein Synchronisierungsprimitiv, das sicherstellt, dass jeweils nur ein Thread in einen geschützten Codeblock eintreten kann.

    1. Standardnutzung

    Der sicherste und empfehlenswerteste Weg ist das MatchingwithVerwenden Sie narrative Sätze. Dadurch wird sichergestellt, dass die Sperre auch dann ordnungsgemäß aufgehoben wird, wenn innerhalb des Blocks eine Ausnahme auftritt, um einen Deadlock zu vermeiden.

    Threading importieren
    
    # 1. Erstellen Sie ein Sperrobjekt
    my_lock = threading.Lock()
    shared_counter = 0
    
    def increment_task():
        globaler shared_counter
        # 2. Verwenden Sie with, um acquire() und release() automatisch zu verwalten
        mit my_lock:
            # Der Code in diesem Block kann jeweils nur von einem Thread ausgeführt werden
            temp = shared_counter
            Temperatur += 1
            shared_counter = temp
    
    # Starten Sie mehrere Thread-Tests
    threads = [threading.Thread(target=increment_task) for _ in range(100)]
    für t in Threads: t.start()
    für t in Threads: t.join()
    
    print(f"Endgültige Zählung: {shared_counter}")

    2. Manuelle Steuerungsmethode

    Obwohl dies nicht empfohlen wird, ist manchmal eine feinere Steuerung erforderlich. Sie müssen manuell anrufenacquire()Erwerben Sie das Schloss undfinallyAnrufblockrelease()

    lock = threading.Lock()
    
    def manual_task():
        lock.acquire() #Erwerbe die Sperre. Wenn die Sperre bereits belegt ist, wird hier blockiert (wartet).
        Versuchen Sie:
            # Aufgaben ausführen
            passieren
        schließlich:
            lock.release() # Muss freigegeben werden, sonst können andere Threads nie ausgeführt werden

    3. Sperreigenschaften: Nichtwiedereintritt

    threading.LockEs ist nicht reentrant. Das heißt, wenn derselbe Thread die gleiche Sperre erneut anfordert, während er die Sperre bereits hält, wird er sich selbst „sperren“ (Deadlock).

    4. Wann sollten Sie Lock verwenden?

    Leistungsüberlegungen

    Eine übermäßige Verwendung von Sperren führt zu einer Verringerung der Programmleistung, da mehrere Threads „zur Ausführung in die Warteschlange gestellt“ werden. Wenn möglich, geben Sie der Verwendung Vorrangqueue.Queueoder was wir zuvor besprochen habenThread-Local StorageDiese Methoden sind in der Regel effizienter und weniger fehleranfällig als häufiges Sperren.



    Asynchrone Python-Programmierung

    In Python,async defUndawaitwird realisiertAsynchrone ProgrammierungKernsyntax. Sie verhindern, dass das Programm beim Warten auf E/A-Aufgaben (z. B. Netzwerkanfragen, Lesen von Dateien) hängen bleibt und können stattdessen andere Aufgaben erledigen, was die Leistung erheblich verbessert.


    1. async def: Coroutine-Funktion definieren

    Wenn Sie einer Funktionsdefinition voranstellenasync, wird die Funktion zu aCoroutine-Funktion. Wenn Sie es aufrufen, führt es den Inhalt nicht sofort aus, sondern gibt ein „Coroutine-Objekt“ zurück.

    async def fetch_data():
        print("Datenabruf starten...")
        # Simulieren Sie zeitaufwändige Aufgaben
        return {"data": "success"}
    
    # Ein direkter Aufruf ruft nur das Coroutine-Objekt ab und führt keinen Druck aus
    result = fetch_data()
    print(result) # Ausgabe: <coroutine object fetch_data at ...>

    2. Warten: Aussetzen und warten

    awaitkann nur seinasync defFür den internen Gebrauch. Seine Funktion besteht darin, „die aktuelle Coroutine vorübergehend anzuhalten, auf den Abschluss der nachfolgenden Aufgaben zu warten und den Rückgabewert abzurufen“. Während des Wartens kann das System andere asynchrone Aufgaben ausführen.

    Asynchron importieren
    
    async def main():
        # Verwenden Sie „await“, um die Coroutine auszuführen und die Ergebnisse zu erhalten
        data = warte auf fetch_data()
        print(f"Ergebnisse erfassen: {data}")
    
    # Starten Sie den Eintrag für asynchrone Programme
    asyncio.run(main())

    3. Schlüsselvergleichstabelle

    Grammatik Funktionsbeschreibung Dinge zu beachten
    async def Deklarieren Sie eine asynchrone Funktion Zurückgegeben wird das Coroutine-Objekt, nicht das Ausführungsergebnis.
    await Warten Sie, bis die asynchronen Aufgaben abgeschlossen sind Kann nur innerhalb asynchroner Funktionen geschrieben werden.
    asyncio.run() Starten Sie den äußersten asynchronen Eintrag Ein Programm muss in der Regel nur einmal aufgerufen werden.

    4. Häufige Fehler und Korrekturen


    5. Warum asynchron verwenden?

    Stellen Sie sich vor, Sie kochen:



    Vervollständigen Sie die Coroutine und geben Sie das Ergebnis zurück

    loop.run_until_complete()JaasyncioDie untergeordnete Methode im Modul wird verwendet, um die Coroutine auszuführen, bis sie abgeschlossen ist, und das Ergebnis zurückzugeben. Nach Python 3.7, obwohl die Verwendung offiziell empfohlen wirdasyncio.run(), aber Sie müssen diese Methode dennoch in bestimmten Situationen verwenden (z. B. wenn Sie Ereignisschleifen wiederverwenden oder die Startlogik anpassen müssen).

    1. Grundlegender Nutzungsprozess

    verwendenrun_until_completeSie müssen zunächst ein Ereignisschleifenobjekt abrufen oder erstellen und ihm dann die Coroutine übergeben.

    Asynchron importieren
    
    async def my_task():
        warte auf asyncio.sleep(1)
        Rückgabe „Aufgabe abgeschlossen“
    
    # 1. Ereignisschleife abrufen
    loop = asyncio.get_event_loop()
    
    # 2. Führen Sie die Coroutine bis zum Abschluss aus und erhalten Sie den Rückgabewert direkt
    result = loop.run_until_complete(my_task())
    
    print(result) #Output: Aufgabe abgeschlossen

    2. Unterschiede zu asyncio.run()

    Beide können den Rückgabewert erhalten, verwalten den Lebenszyklus jedoch unterschiedlich:

    Merkmal asyncio.run() (empfohlen) loop.run_until_complete()
    Grad der Automatisierung hoch. Erstellen und schließen Sie automatisch Schleifen und bereinigen Sie Aufgaben. Niedrig. Der Lebenszyklus der Schleife muss manuell verwaltet werden.
    Wiederverwendbarkeit Niedrig. Jeder Aufruf erzeugt eine neue Schleife. hoch. Mehrere Aufgaben können in derselben Schleife ausgeführt werden.
    Nutzungsbeschränkungen Kann nicht innerhalb einer bereits laufenden Schleife verwendet werden. Flexibler und häufig in Legacy-Code oder Testumgebungen verwendet.

    3. Erhalten Sie Ergebnisse in vorhandenen Schleifen

    Wenn Sie sich in einem Skript befinden, das bereits ausgeführt wird, und sicherstellen möchten, dass eine Coroutine ausgeführt und der Wert erhalten wird, können Sie diese Methode verwenden:

    Asynchron importieren
    
    async def add(a, b):
        gib a + b zurück
    
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    
    Versuchen Sie:
        # Führen Sie die erste Aufgabe aus
        val1 = loop.run_until_complete(add(10, 20))
        #Führen Sie die zweite Aufgabe aus
        val2 = loop.run_until_complete(add(val1, 5))
        print(f"Endergebnis: {val2}")
    schließlich:
        # Muss manuell geschlossen werden
        loop.close()

    4. Erhalten Sie die Ergebnisse mehrerer Aufgaben

    Wenn Sie möchten, dass mehrere Coroutinen parallel ausgeführt werden und den Rückgabewert einheitlich abrufen, müssen Sie eine Übereinstimmung erzielenasyncio.gather

    asynchrone Def-Aufgabe (ID):
        return f"result {id}"
    
    loop = asyncio.get_event_loop()
    # Gather packt mehrere Coroutinen in eine Aufgabe und run_until_complete wartet, bis alle abgeschlossen sind.
    Ergebnisse = loop.run_until_complete(asyncio.gather(task(1), task(2), task(3)))
    print(results) #Output: ['Ergebnis 1', 'Ergebnis 2', 'Ergebnis 3']

    5. Allgemeine Vorsichtsmaßnahmen



    asyncio.run()Es handelt sich um eine High-Level-API, die seit Python 3.7 eingeführt wurde. Dies ist die am meisten empfohlene Methode zum Starten asynchroner Programme. es wird sich automatisch darum kümmernErstellen Sie eine Ereignisschleife, führen Sie die Coroutine aus und schließen Sie die Schleife nach Abschluss. Das Wichtigste ist, dass es direkt an die Coroutine zurückgegeben wirdreturnWert.

    1. Grundlegende Erfassungsmethoden

    Du musst es einfach tunasync defDer an übergebene Funktionsaufrufasyncio.run(), wird das Ergebnis wie eine normale synchrone Funktion zurückgegeben.

    Asynchron importieren
    
    async def berechne_score(name):
        print(f"Berechnung der Punktzahl von {name}...")
        wait asyncio.sleep(1) # Simulieren Sie zeitaufwändige Aufgaben
        Rückkehr 95
    
    # Erhalten Sie das Ergebnis der Rückgabe direkt
    final_score = asyncio.run(calculate_score("Zhang Xiaoming"))
    
    print(f"Das Endergebnis ist: {final_score}") # Ausgabe: 95

    2. Verarbeiten Sie die Ergebnisse mehrerer Aufgaben

    Normalerweise definieren wir amain()Funktioniert als Einstiegspunkt und erhält die Ergebnisse aller Unteraufgaben innerhalb und schließlich vonasyncio.run(main())Einheitliche Ausgabe.

    async def task_a():
        „Apfel“ zurückgeben
    
    async def task_b():
        „Banane“ zurückgeben
    
    async def main():
        # Verwenden Sie „gather in main“, um gleichzeitig auszuführen
        Ergebnisse = Warten auf asyncio.gather(task_a(), task_b())
        return results # Gibt eine Liste zurück
    
    # Rufen Sie den Rückgabewert von main über asyncio.run ab
    all_fruits = asyncio.run(main())
    print(all_fruits) # Ausgabe: ['apple', 'banana']

    3. Ausführungsregeln von asyncio.run()

    Regelelemente veranschaulichen
    Einzeleingang Wird in einer Ausführungsfortsetzung normalerweise nur einmal aufgerufenasyncio.run()
    Automatische Reinigung Es bricht automatisch alle verbleibenden Aufgaben ab und schließt den Thread-Pool, was sehr sicher ist.
    Verschachtelungsgrenze kann nichtist schonasync defFunktionsinterner Aufrufasyncio.run()

    4. Häufige Fehler: RuntimeError

    Wenn Sie sich in einer asynchronen Funktion befinden und versuchen, die Ergebnisse einer anderen asynchronen Funktion abzurufen, verwenden Sieawait, anstattasyncio.run()

    # Fehlerdemonstration
    async def sub_task():
        Rückkehr 10
    
    async def main():
        # Hier tritt ein Fehler auf: RuntimeError: asyncio.run() kann nicht aus einer laufenden Ereignisschleife aufgerufen werden
        res = asyncio.run(sub_task())
        
    # Richtige Korrektur
    async def main():
        res = wait sub_task() # Bitte verwenden Sie „await“ in einer asynchronen Umgebung

    5. Praktische Vorschläge



    Python-Datenanalyse

    Wissenschaftliche Python-Operationen NumPy

    NumPy(Numerical Python) ist die wichtigste wissenschaftliche Computerbibliothek in Python. Es bietet effiziente mehrdimensionale Array-Objektendarrayund eine große Bibliothek mathematischer Funktionen zum Bearbeiten dieser Arrays. Es ist die grundlegende Säule der Datenwissenschaft, des maschinellen Lernens (wie Pandas, Scikit-learn, TensorFlow) und anderer Bereiche.


    1. Warum NumPy anstelle von nativer Liste wählen?


    2. Kernobjekt: Ndarray-Grundoperationen

    numpy als np importieren
    
    # Erstellen Sie eindimensionale und zweidimensionale Arrays
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([[1, 2], [3, 4]])
    
    # Erstellen Sie schnell ein bestimmtes Array
    nullen = np.zeros((3, 3)) # 3x3-Matrix mit allen Nullen
    ones = np.ones((2, 4)) # 2x4-Matrix mit allen Einsen
    eye = np.eye(3) # 3x3 Identitätsmatrix
    range_arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]

    3. Häufig verwendete Array-Operationen und -Attribute

    Funktion Codebeispiel veranschaulichen
    Formprüfung arr.shape Gibt die Größe jeder Dimension zurück (z. B. (3, 2)).
    Form ändern arr.reshape(1, 6) Ändern Sie Dimensionen, ohne die Daten zu ändern.
    Matrixmultiplikation np.dot(a, b)odera @ b Führen Sie eine Matrixmultiplikation in der linearen Algebra durch.
    statistische Funktion np.mean(), np.std() Berechnen Sie den Mittelwert, die Standardabweichung sowie die Maximal- und Minimalwerte.

    4. Schneiden und Indizieren

    Die Slicing-Syntax von NumPy ähnelt der von Python List, ist jedoch leistungsfähiger und unterstützt mehrdimensionales gleichzeitiges Slicing:

    arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    
    # Holen Sie sich die zweite Spalte (Index 1)
    print(arr[1, :]) # [4, 5, 6]
    
    # Holen Sie sich die 2x2-Submatrix in der unteren rechten Ecke
    print(arr[1:, 1:]) # [[5, 6], [8, 9]]

    5. Installation und Versionsprüfung


    6. Mit Numba verwenden

    Wie bereits erwähnt,NumbaEs kann die Array-Struktur von NumPy perfekt erkennen und komplexe NumPy-Operationen weiter in Maschinencode kompilieren, wodurch die Ausführungsgrenze nahe der nativen C-Sprache erreicht wird.



    Python verarbeitet effizient große Datenmengen Numba

    NumbaEs handelt sich um einen Open-Source-JIT-Compiler (Just-In-Time), der speziell zur Beschleunigung von Python-Code entwickelt wurde, der große Datenmengen verarbeitet. Es kann Python-Funktionen mit einer mit C, C++ oder Fortran vergleichbaren Ausführungsgeschwindigkeit in Maschinencode übersetzen und eignet sich besonders fürNumPyArray-Operationen.


    1. Kernfunktionen und Vorteile


    2. Grundlegende Anwendungsbeispiele

    Der einfachste Weg, Numba zu verwenden, ist das Hinzufügen@jitoder@njitDekorateur.

    von numba import njit
    numpy als np importieren
    
    # @njit stellt den „nopython“-Modus dar, der sicherstellt, dass der Python-Parser nicht aufgerufen wird, und der am schnellsten ist
    @njit
    def fast_function(n):
        gesamt=0
        für i im Bereich(n):
            insgesamt += i
        Gesamtrücklauf
    
    # Der erste Aufruf wird kompiliert, der zweite Aufruf führt den Maschinencode direkt aus
    print(fast_function(10000000))

    3. Mustervergleich: Nopython vs. Objekt

    Modell Dekorateur veranschaulichen
    Nopython-Modus @njit Empfohlen.Vollständig vom Python-Interpreter getrennt und direkt in Maschinencode kompiliert. Enthält der Programmcode Teile, die nicht kompilierbar sind, wird ein Fehler gemeldet.
    Objektmodus @jit Wenn es nicht kompiliert werden kann, wird es zur Ausführung auf den Python-Parser zurückgegriffen. Leistungsverbesserungen sind normalerweise begrenzt.

    4. Häufig verwendete Techniken: Paralleloperationen

    Um die Multi-Core-Fähigkeiten Ihrer CPU zu nutzen, schalten Sie sie einfach einparallel=Trueund verwendenprange

    from numba import njit, prange
    
    @njit(parallel=True)
    def parallel_sum(A):
        s = 0
        # prange weist Schleifen automatisch verschiedenen CPU-Kernen zu
        für i in prange(A.shape[0]):
            s += A[i]
        Rückkehr s

    5. Installation und Abhängigkeitsprüfung


    6. Nutzungsbeschränkungen



    Pandas-Datenanalysetool

    Was sind Pandas?

    Pandas ist ein Python-basiertes Datenanalyse- und -manipulationstool, das für die Verarbeitung strukturierter Daten wie Tabellendaten oder Zeitreihendaten entwickelt wurde.

    Pandas-Kerndatenstrukturen

    Hauptmerkmale von Pandas

    Anwendungsbeispiele

    Pandas als PD importieren
    
    # DataFrame erstellen
    data = {'Name': ['Alice', 'Bob', 'Charlie'],
            'Alter': [25, 30, 35],
            'Stadt': ['Taipei', 'Taichung', 'Kaohsiung']}
    df = pd.DataFrame(data)
    
    # Daten anzeigen
    drucken(df)
    
    # Informationen filtern, die älter als 28 sind
    filtered_df = df[df['age'] > 28]
    print(filtered_df)

    Anwendbare Szenarien

    Warum Pandas wählen?

    Pandas bietet effiziente, flexible und intuitive Bedienmethoden, die sich besonders für die Datenanalyse und -verarbeitung eignen. Es ist eines der unverzichtbaren Werkzeuge in der Datenwissenschaft und im maschinellen Lernen.

    abschließend

    Pandas ist ein leistungsstarkes Datenanalysetool und sowohl Anfänger als auch Fortgeschrittene können von seinem benutzerfreundlichen Design und der umfangreichen Funktionalität profitieren.



    Python Googletrans

    Installieren Sie Googletrans

    Zuerst müssen Sie installierengoogletransBausatz. Geben Sie in der Befehlszeile den folgenden Befehl ein:

    pip install googletrans==4.0.0-rc1

    Hinweis: Bitte bestätigen Sie bei der Installation die Version4.0.0-rc1, da ältere Versionen möglicherweise nicht mehr funktionieren.

    Grundlegende Anwendungsbeispiele

    Hier ist ein Beispiel für die Übersetzung von Englisch ins traditionelle Chinesisch:

    vom Googletrans-Importübersetzer
    
    #Initialisieren Sie das Translator-Objekt
    Übersetzer = Übersetzer()
    
    # Text übersetzen
    text = „Hallo, wie geht es dir?“
    result = translator.translate(text, src="en", dest="zh-tw")
    
    # Übersetzungsergebnisse ausgeben
    print("Originaltext:", Text)
    print("Übersetzung:", result.text)

    Unterstützte Sprachcodes

    Sie können mehrere Sprachen übersetzen. Hier sind die allgemeinen Sprachcodes:

    Dinge zu beachten

    Googletrans ist eine inoffizielle Google Translate-API und funktioniert aufgrund von Änderungen seitens Google möglicherweise nicht mehr. Wenn Sie feststellen, dass die Übersetzungsfunktion nicht funktioniert, ziehen Sie bitte die Verwendung anderer Übersetzungs-APIs in Betracht, beispielsweise die offizielle Cloud-Übersetzung von Google API.



    Andere Python-Übersetzungskits

    DeepL Translator

    DeepL bietet hochpräzise Übersetzungsdienste, erfordert jedoch einen API-Schlüssel, um seine Entwickler-API zu verwenden.

    Microsoft Translator

    Das von Microsoft bereitgestellte Übersetzungstool unterstützt mehrsprachige Übersetzungen, erfordert jedoch die Verwendung von Azure-API-Schlüsseleinstellungen.

    Amazon Translate

    Der von Amazon Web Services (AWS) bereitgestellte Übersetzungsdienst ermöglicht die effiziente Übersetzung mehrsprachiger Texte und muss über den von AWS bereitgestellten API-Schlüssel aufgerufen werden.

    LibreTranslate

    LibreTranslate ist ein Open-Source-Übersetzungstool, das einen eigenen Server einrichten kann und keinen API-Schlüssel benötigt. Einige öffentliche Server von Drittanbietern bieten auch die Möglichkeit, diese ohne API-Schlüssel zu verwenden.

    TextBlob

    TextBlob ist ein auf der Verarbeitung natürlicher Sprache basierendes Tool mit integrierter Google Translate-Funktionalität. Ältere Versionen erfordern jedoch keinen API-Schlüssel und müssen möglicherweise auf die Versionsunterstützung achten.

    MyMemory

    MyMemory bietet speicherbasierte Übersetzung. Für einige Funktionen ist kein API-Schlüssel erforderlich, für die erweiterte Nutzung ist jedoch möglicherweise eine Anwendung erforderlich.

    abschließend

    Unter den Konkurrenten von Googletrans bieten LibreTranslate und einige Versionen von TextBlob Optionen, die keinen API-Schlüssel erfordern. Wenn Sie ein Tool benötigen, das völlig kostenlos ist und keine zusätzliche Einrichtung erfordert, sollten Sie diese Optionen in Betracht ziehen.



    OpenCC-Konvertierung für Chinesisch

    OpenCC(Open Chinese Convert) ist ein Open-Source-Projekt, das sich der Konvertierung von vereinfachtem Chinesisch in traditionelles Chinesisch widmet. Es handelt sich nicht nur um eine einfache Wort-zu-Wort-Konvertierung, sondern, was noch wichtiger ist, es funktioniertWortschatzniveauKonvertierung und Unterschiede in den Wortgebrauchsgewohnheiten in verschiedenen Regionen (Festlandchina, Taiwan, Hongkong).


    1. Kernvorteile von OpenCC