Die eval()-Funktion in Python

Hiten Kanwar 3 Januar 2023
Die eval()-Funktion in Python

Python ist eine interpretierte höhere Programmiersprache. Es hat eine saubere Codestruktur und Lesbarkeit mit seiner auffälligen signifikanten Einrückung.

Die Funktion eval() parst das Ausdrucksargument und wertet es dann als Python-Ausdruck aus.

Die Syntax der Funktion eval() ist unten aufgeführt.

eval(expression, [globals[, locals]])

Der Rückgabewert basiert auf und ist das Ergebnis des ausgewerteten Ausdrucks.

Im folgenden Beispiel werten wir eine einfache Addition aus.

x = 2
eval("x+5")

Ausgabe:

7

Die Argumente der Funktion eval() sind ein String und optionale Argumente von globals und locals. Wenn globals bereitgestellt werden, muss es sich um ein Dictionary handeln. Die locals können ein beliebiges Mapping-Objekt sein.

Angenommen, das Dictionary globals wird bereitgestellt, und der Wert für den Schlüssel wird nicht mitgeliefert. Ein Verweis auf das Dictionary des eingebauten Moduls builtins wird generiert und unter dem Schlüsselabschnitt eingefügt, bevor der Ausdruck mit dem Parsen beginnt.

Dies deutet grob darauf hin, dass der Ausdruck normalerweise vollständigen Zugriff auf das Standardmodul builtins hat. Wenn das Objekt locals nicht bereitgestellt wird, wird standardmäßig das globale Dictionary verwendet. Auch in einem Szenario, in dem beide Wörterbücher weggelassen werden, wird der Ausdruck mit den globals und locals in der Umgebung ausgeführt, in der die Funktion eval() aufgerufen wird.

Es gibt bestimmte Funktionen innerhalb des Moduls builtins, die das System wahrscheinlich erheblich beschädigen können. Aber es ist sicherlich möglich, alle verdächtigen Dinge zu blockieren.

Betrachten Sie beispielsweise ein Beispiel zum Erstellen einer Liste, die die Anzahl der verfügbaren Kerne im System darstellt.

from os import cpu_count

eval("[1, cpu_count()]")

Ausgabe:

[1, 8]
Notiz
Da diese Funktion jeden String als Code auswertet, muss man bei der Verwendung sehr vorsichtig sein. Jemand kann es verwenden, um Code auf dem Computer als Sicherheitslücke auszuführen. Zum Beispiel fordert eval(input()) den Benutzer auf, den String einzugeben und als Code auszuführen. Wenn das Modul os importiert wird, kann man auf dem Gerät alle möglichen Aktionen ausführen, wie zum Beispiel Dateien löschen und das System manipulieren.