Um einzelne Code­zei­len oder einen Codeblock direkt aus­zu­füh­ren und das Ergebnis in einer Variable zu speichern, können Sie die Python-Compile-Funktion benutzen. Sie liefert Ihnen ein Code-Objekt zurück, das Sie ausführen können.

Ein­satz­mög­lich­kei­ten

Wenn Sie einzelne Code­an­wei­sun­gen nicht direkt in Ihrem Python-Programm ausführen möchten, sondern lediglich einer Variable zuweisen wollen, dann können Sie die Python-Compile-Funktion einsetzen. Sie dient dazu, Quellcode in Ob­jekt­code um­zu­wan­deln, und gibt Ihnen ein Objekt zurück, das Sie im Anschluss mithilfe von Python exec ausführen können. Sie können der Python-Compile-Funktion auch eine Datei übergeben, aus der der Quellcode ex­tra­hiert wird.

Tipp

Sie nutzen Python als ef­fi­zi­en­te Pro­gram­mier­spra­che für Ihr Web­pro­jekt? Dann hilft Ihnen IONOS Deploy Now dabei, noch ef­fi­zi­en­ter zu arbeiten, indem Sie Ihre Websites jederzeit via GitHub deployen können. Die Echtzeit-Vorschau er­mög­licht Ihnen, den aktuellen Stand Ihres Projekts jederzeit mit nur wenigen Klicks live an­zu­schau­en.

Syntax von Python Compile

Die Python-Compile-Funktion kann mit bis zu sechs ver­schie­de­nen Pa­ra­me­tern auf­ge­ru­fen werden, wobei al­ler­dings nur die ersten drei Parameter zwingend er­for­der­lich sind. Die ver­blei­ben­den Parameter der Funktion sind optional und können nach Belieben gesetzt werden, um das Verhalten der Funktion zu spe­zi­fi­zie­ren.

compile(source, filename, mode, flags = 0, dont_inherit = False, optimize = -1)

Es hilft für das Ver­ständ­nis der Compile-Funktion, sich einen Überblick über die einzelnen Parameter zu ver­schaf­fen.

Parameter Optional Be­schrei­bung
source nein Hier übergeben Sie das, was Sie kom­pi­lie­ren möchten. Hierbei handelt es sich meistens um Strings, Sie können aber auch Byte-Objekte oder AST-Objekte übergeben.
filename nein An dieser Stelle geben Sie die Da­tei­quel­le des zu kom­pi­lie­ren­den Objektes an. Wenn es keine Datei gibt, können Sie schreiben, was Sie möchten. Der Parameter muss dennoch gesetzt werden.
mode nein Im Parameter mode spe­zi­fi­zie­ren Sie, wie kom­pi­liert werden soll. Sie haben die Auswahl zwischen folgenden Werten:eval: Einzelne Ausdrücke werden mit eval evaluiert.exec: Code­blö­cke werden mit exec aus­ge­wer­tet.single: Für einzelne, in­ter­ak­ti­ve State­ments nutzen Sie single.
flags ja Hier können Sie angeben, wie die Quelle genau kom­pi­liert werden soll. Für die al­ler­meis­ten An­wen­dungs­fäl­le können Sie das Flag aber igno­rie­ren.
dont_inherit ja Genau wie flag dient der Parameter dont_inherit dazu, die Kom­pi­lie­rung Ihrer Quelle zu spe­zi­fi­zie­ren.
optimize ja Im Parameter optimize können Sie das Op­ti­mie­rungs­ni­veau Ihres Kom­pi­lier­vor­gangs bestimmen.

Anwendung von Python Compile

Um sich zu ver­an­schau­li­chen, wie Python Compile funk­tio­niert, ist ein Code­bei­spiel hilfreich:

codeAsString = 'x = 10\ny = 7\nres = x * y\nprint("result = ", res)'
codeObject = compile(codeAsString, ' ', 'exec')
exec(codeObject)

Zunächst de­fi­nie­ren Sie die Variable namens code­As­String, in der folgender, einfacher Python-Code als Python String ge­spei­chert wird:

x = 10
y = 7
res = x * y
print("result = ", res)

Lassen Sie sich nicht von den „\n“s im String code­As­String verwirren: Hierbei handelt es sich um das Steu­er­zei­chen, das einen Zei­len­um­bruch markiert. Wie Sie sehen, können Sie Ihren Python-Code also einfach als Zei­chen­ket­te in einer her­kömm­li­chen Variable hin­ter­le­gen. Um nun aber dafür zu sorgen, dass der Code nicht einfach nur als eine einfache Zei­chen­ket­te in­ter­pre­tiert wird, benötigen Sie die Compile-Funktion. Der Aufruf der Compile-Funktion im obigen Beispiel nutzt nur die er­for­der­li­chen Parameter.

Zunächst übergeben Sie das, was kom­pi­liert werden soll, nämlich Ihren String. An­schlie­ßend spe­zi­fi­zie­ren Sie die Da­tei­quel­le Ihres Strings. Da der String direkt im Code definiert und nicht aus einer Datei gelesen wurde, reicht es, die leere Zei­chen­ket­te anzugeben. Sie können theo­re­tisch aber jede Zei­chen­ket­te Ihrer Wahl nutzen.

Der letzte Parameter ist wieder spannend: Da es sich bei unserem String code­As­String, wie die Auflösung des Strings im zweiten Code­bei­spiel zeigt, um einen ganzen Codeblock handelt, nutzen wir den Parameter exec. Denken Sie daran, dass es sich hier um einen String handelt, und vergessen Sie die An­füh­rungs­zei­chen nicht.

Das Ergebnis der Python-Compile-Funktion wird im obigen Code­bei­spiel der Variable namens code­Ob­jekt zu­ge­wie­sen. Diese enthält jetzt genau das, was ihr Name vermuten lässt: ein Code-Objekt. Das Besondere an einem Code-Objekt ist, dass Sie es jederzeit mit einem Aufruf von Pythons exec-Funktion ausführen können. Genau das geschieht in der letzten Codezeile, sodass das Programm am Ende „result = 70“ ausgeben wird.

Kom­pi­lie­ren einer einzigen Anweisung

Wenn Sie nur eine einzige Code­an­wei­sung kom­pi­lie­ren möchten, müssen Sie den dritten Parameter beim Funk­ti­ons­auf­ruf von Python Compile anpassen. Das liegt daran, dass für einzelne An­wei­sun­gen der Modus eval genutzt wird. Auch hier hilft ein Beispiel:

singleInstruction = 'print("Hello World!")'
codeObject = compile(singleInstruction, ' ', 'eval')
exec(codeObject)

Im Grunde hat sich hier nicht viel verändert. Noch immer wird ein String mit Python-Code erstellt. Im Gegensatz zum vor­he­ri­gen Beispiel enthält der String in diesem Fall aber nur eine einzelne Python-Print-Anweisung. Das erfordert die Nutzung des eval-Modus, der für die Aus­wer­tung einzelner In­struk­tio­nen genutzt wird.

Wenn Sie nun erneut Ihr Code-Objekt mithilfe der exec-Funktion ausführen, werden Sie sehen, dass alles funk­tio­niert wie erwartet. Ihr Programm gibt „Hello World!“ auf dem Bild­schirm aus.

Quellcode aus Da­tei­quel­len ver­ar­bei­ten

In den bis­he­ri­gen Bei­spie­len haben wir den Quellcode, den die Python-Compile-Funktion be­ar­bei­ten sollte, immer im Programm selbst als String definiert. Doch was ist, wenn Sie eine Datei haben, die Code be­inhal­tet, den Sie in Ihrem Programm ausführen möchten? Auch hierfür können Sie die Python Compile nutzen.

Nehmen wir an, Sie haben eine Datei namens testcode.py, die einen aus­führ­ba­ren Python-Code enthält, und möchten diesen nun in Ihrem Programm ausführen:

tmpFile = open('testcode.py', 'r')
tmpCode = tmpFile.read()
tmpFile.close()
codeObject = compile(tmpCode, 'testcode.py', 'exec')
exec(codeObject)

Zunächst müssen Sie den Code, den Sie ausführen möchten, aus der Datei lesen, in der er sich aktuell befindet. Hierfür öffnen Sie die Datei mit Pythons open-Funktion und mit Le­se­zu­griff. An­schlie­ßend können Sie Python Read nutzen, um den Quellcode in Ihre Variable namens tmpCode ein­zu­le­sen, und die anfangs geöffnete Datei wieder schließen.

Nun folgt der Aufruf von Python Compile. An dieser Stelle ist es wichtig, dass Sie angeben, woher Sie den Code, den Sie kom­pi­lie­ren möchten, bekommen haben – in diesem Fall aus der Datei testcode.py. Im Anschluss ähnelt unser Programm den vor­he­ri­gen Bei­spie­len, und mit dem ab­schlie­ßen­den Aufruf von exec führen Sie den Code aus testcode.py schluss­end­lich in Ihrem Programm aus.

Zum Hauptmenü