Eine oft gestellte Frage lautet: Ist Python eine interpretierte Sprache? Wird es kompiliert? Diese Frage ist nicht so einfach zu beantworten wie gedacht. Wie viele Menschen, die die Welt verstehen, sind sie es gewohnt, manche Dinge anhand eines einfachen Modells zu beurteilen. Tatsächlich enthält es viele, viele Details.
Im Allgemeinen bedeutet Kompilieren das Konvertieren einer Hochsprache in Maschinencode, der von der CPU ausgeführt werden kann. Wenn Sie C kompilieren, ist genau das, was Sie tun. Das Ergebnis der Kompilierung ist eine binäre ausführbare Datei, und Ihr System kann dieses Programm direkt ausführen.
Im Gegensatz dazu bedeutet die Erklärung Folgendes: Wenn das Programm ausgeführt wird, liest es jedes Mal eine Codezeile in der Quelldatei, führt die entsprechende Operation aus und wiederholt diese Zeile für Zeile. So funktionieren natürlich sogenannte Skriptsprachen.
Aber tatsächlich weist die obige Definition zu viele Einschränkungen auf. Eine echte Sprache verwendet normalerweise verschiedene Implementierungsmethoden, um nützlichere und leistungsfähigere Funktionen zu erhalten. Wir können Kompilierung allgemeiner verstehen: die Umwandlung einer Sprache in eine andere Sprachform. Im Allgemeinen ist die Quellsprache fortgeschrittener als die Zielsprache, beispielsweise die Konvertierung von C in Maschinencode. Natürlich handelt es sich bei der Umstellung von JavaScript 8 auf JavaScript 5 auch um eine Art Kompilierung.
In Python wird Quellcode in eine niedrigere Form kompiliert, die wir Bytecode nennen. Bytecode ist eine Folge von Anweisungen, ähnlich dem Befehlssatz einer CPU. Allerdings wird der Bytecode nicht direkt von der CPU ausgeführt, sondern in der virtuellen Maschine. Natürlich imitiert die virtuelle Maschine hier nicht die gesamte Betriebssystemumgebung, sondern bietet nur eine Umgebung für die Ausführung von Bytecode.
Sehen wir uns einen kleinen Codeausschnitt in Python und den entsprechenden Bytecode an
Nachdem wir den Inhalt des Bytecodes gelesen haben, wissen wir, dass f' .. .' Das Funktionsprinzip dieses formatierten Zeichenfolgenformats besteht darin, die darin enthaltene Zeichenfolge in eine Reihe von Literalzeichenfolgen und Variablen umzuwandeln und diese dann mit dem +-Zeichen zu verbinden.
dis ist das Disassemblierungsmodul in der Python-Standardbibliothek, das die Bytecode-Informationen von Python-Code anzeigen kann. Die oben erwähnte virtuelle Maschine, die den Bytecode ausführt, kann in jeder Sprache implementiert werden, einschließlich Python selbst. Wenn Sie interessiert sind, können Sie sich dieses Projekt nedbat/byterun auf GitHub ansehen. Dieses Projekt kann zum Lernen verwendet werden, ist jedoch nicht für Produktionsumgebungen geeignet.
Wenn wir Python ausführen, können wir den Kompilierungsprozess jedoch überhaupt nicht spüren. Wir führen einfach die .py-Datei aus und die Kompilierung wird bei Bedarf automatisch durchgeführt. Dies unterscheidet sich von JAVA. Jedes Mal, wenn Sie JAVA-Code schreiben und ihn ausführen möchten, müssen Sie ihn manuell in eine .class-Datei kompilieren und dann ausführen. Aus diesem Grund wird JAVA als kompilierte Sprache und Python als interpretierte Sprache bezeichnet. Tatsächlich werden beide Sprachen jedoch bei der Ausführung zunächst in Bytecode kompiliert und dann zur Ausführung an die virtuelle Maschine übergeben.
Python verfügt auch über eine wichtige Funktion, nämlich die interaktive Befehlszeile. Sie können eine Zeile einer Python-Anweisung eingeben und sofort die Eingabetaste drücken, um sie auszuführen. Tatsächlich wird Python auch in diesem Prozess zunächst in Bytecode konvertiert und dann ausgeführt. Diese interaktive Befehlszeilenfunktion ist in vielen kompilierten Sprachen nicht verfügbar. Auch weil es keinen expliziten Aufruf des Compilers gibt, nennen viele Leute das Programm, das Python-Quelldateien ausführt, einen Python-Interpreter.
Auch wenn es relativ einfach ist, möchte ich es dennoch hinzufügen. Einige kompilierte Sprachen wie C oder JAVA verfügen auch über interaktive Befehlszeilen, diese stehen jedoch nicht im Mittelpunkt dieser Sprachen. JAVA wurde zunächst in Bytecode kompiliert und dann ausgeführt. Mithilfe der Just-in-Time-Kompilierungstechnologie (JIT) kann es ähnlich wie bei C direkt in Maschinencode kompiliert werden.
Wie aus der obigen Beschreibung ersichtlich ist, können Interpretation und Zusammenstellung nicht vollständig getrennt werden. Oft möchten wir einige Wörter verwenden, um vorhandene Programmiersprachen zu klassifizieren, aber tatsächlich ist dies zu schwierig.
Als Letztes ist zu beachten, dass die Art und Weise, wie Ihr Code ausgeführt wird, nur eine Frage der Sprachimplementierung ist, nicht ein Merkmal der Sprache. Oben sprechen wir über Python, aber es ist eigentlich eine Beschreibung von CPython. CPython ist ein Interpreter, der so genannt wird, weil der Interpreter in C geschrieben ist, das auch der Standardinterpreter für Python ist. Natürlich gibt es noch viele andere Interpreter, zum Beispiel ist PyPy ein weiterer Interpreter, der die JIT-Technologie nutzt und dessen Laufgeschwindigkeit im Vergleich zu CPython deutlich verbessert ist.
Zurück zur Frage im Titel: Der Grund, warum Python als interpretierte Sprache bezeichnet wird, liegt darin, dass es Kompilierungsoperationen nicht explizit aufruft und mehr interpretierte Merkmale aufweist. Tatsächlich gibt es jedoch eine Kompilierung, die von der Implementierung der Sprache abhängt, dh vom Design des Interpreters.
Weitere technische Artikel zum Thema Python finden Sie in der Spalte Python-Tutorial, um mehr darüber zu erfahren!
Das obige ist der detaillierte Inhalt vonMuss Python kompiliert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!