Eval, Exec et Compile : une analyse comparative
Différences de fonctionnalité
Eval évalue une expression unique de manière dynamique et renvoie le résultat.
Exec exécute un bloc de code donné et supprime sa valeur de retour, principalement utilisée pour ses effets secondaires.
Compile et modes
La compilation joue un rôle crucial à la fois dans eval et exec :
-
Mode 'eval' : Compile une seule expression en bytecode qui renvoie la valeur évaluée value.
-
mode 'exec' : Compile des fragments de code de tout type en bytecode qui renvoie Aucun (dans Python 2, c'était une instruction et n'a rien renvoyé).
Syntaxe et différences
Python 2
- Exec est une instruction.
- Eval est une fonction.
- Exec accepte un tuple de longueur 2 ou 3 pour définir les globaux et les locaux ( un hack pour la compatibilité ascendante).
Python 3
- Exec est une fonction.
- Exec et eval se comportent de manière identique lorsqu'un objet code est transmis.
Comparaison détaillée
Évaluer Expressions :
- Exec n'accepte pas les expressions directement.
- Eval n'accepte que les expressions uniques sous forme de chaînes ou d'objets de code.
Effets secondaires :
- Exec est utilisé uniquement pour les effets secondaires tels que les modifications de variables ou les fonctions. appels.
- Eval n'a aucun effet secondaire, renvoyant la valeur de l'expression évaluée.
Déclarations et blocs de code :
- Exec accepte les blocs de code contenant des instructions, des boucles et des importations.
- Eval ne peut pas gérer directement les instructions ; il nécessite des objets de code compilés pour les instructions.
Exemple d'utilisation
Calcul et impression :
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)
Copier après la connexion
Modification des variables :
a = 2
exec('a = 47') # Exec modifies the global variable `a`
result = eval('a = 47') # Eval throws an error because it cannot handle statements
Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!