Eval, Exec und Compile: Eine vergleichende Analyse
Unterschiede in der Funktionalität
Eval wertet einen einzelnen Ausdruck dynamisch aus und gibt das Ergebnis zurück.
Exec führt einen bestimmten Codeblock aus und verwirft seinen Rückgabewert, der hauptsächlich wegen seiner Nebenwirkungen verwendet wird.
Kompilieren und Modi
Kompilieren spielt sowohl bei eval als auch bei exec eine entscheidende Rolle:
-
'eval'-Modus: Kompiliert einen einzelnen Ausdruck in Bytecode, der den ausgewerteten Wert zurückgibt Wert.
-
'exec'-Modus: Kompiliert Codefragmente beliebiger Art in Bytecode, der None zurückgibt (in Python 2 war es eine Anweisung und hat nichts zurückgegeben).
Syntax und Unterschiede
Python 2
- Exec ist eine Anweisung.
- Eval ist eine Funktion.
- Exec akzeptiert ein Tupel der Länge 2 oder 3, um globale und lokale Werte zu definieren ( ein Hack für Abwärtskompatibilität).
Python 3
- Exec ist eine Funktion.
- Exec und eval verhalten sich identisch, wenn ein Codeobjekt übergeben wird.
Detaillierter Vergleich
Bewerten Ausdrücke:
- Exec akzeptiert keine Ausdrücke direkt.
- Eval akzeptiert nur einzelne Ausdrücke als Zeichenfolgen oder Codeobjekte.
Nebenwirkungen:
- Exec wird ausschließlich für Nebenwirkungen wie Variablenänderungen verwendet oder Funktionsaufrufe.
- Eval hat keine Nebenwirkungen und gibt den Wert des ausgewerteten Ausdrucks zurück.
Anweisungen und Codeblöcke:
- Exec akzeptiert Codeblöcke, die Anweisungen, Schleifen und Importe enthalten.
- Eval kann Anweisungen nicht direkt verarbeiten; es erfordert kompilierte Codeobjekte für Anweisungen.
Beispielverwendung
Berechnen und Drucken:
a = 5
result = eval('37 + a') # Eval calculates the expression and returns the result (42)
exec('print(37 + a)') # Exec executes the code (prints 42)
Nach dem Login kopieren
Variablen ändern:
a = 2
exec('a = 47') # Exec modifies the global variable `a`
result = eval('a = 47') # Eval throws an error because it cannot handle statements
Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonEval vs. Exec vs. Compile in Python: Was ist der Unterschied?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!