Python LanguageExécution de code dynamique avec `exec` et` eval`


Syntaxe

  • eval (expression [, globals = None [, locaux = None]])
  • exec (objet)
  • exec (objet, globales)
  • exec (objet, globales, locaux)

Paramètres

Argument Détails
expression Le code de l'expression sous la forme d'une chaîne ou d'un objet de code
object Le code d'instruction sous la forme d'une chaîne ou d'un objet de code
globals Le dictionnaire à utiliser pour les variables globales. Si les locaux ne sont pas spécifiés, cela est également utilisé pour les locaux. Si omis, les globals() de la portée appelante sont utilisés.
locals Un objet de mappage utilisé pour les variables locales. Si omis, celui passé pour les globals est utilisé à la place. Si les deux sont omis, les globals() et locals() de la portée d'appel sont utilisés respectivement pour les globals et les locals .

Remarques

Dans exec , si les globals sont des locals (c'est-à-dire qu'ils font référence au même objet), le code est exécuté comme s'il était au niveau du module. Si les globals et les locals sont des objets distincts, le code est exécuté comme s'il était dans un corps de classe .

Si l'objet globals est transmis mais ne spécifie pas la clé __builtins__ , les fonctions et les noms intégrés à Python sont automatiquement ajoutés à la portée globale. Pour supprimer la disponibilité des fonctions telles que l' print ou isinstance dans le cadre exécuté, laissez - globals ont la clé __builtins__ mis en correspondance avec la valeur None . Cependant, ce n'est pas une fonctionnalité de sécurité.

La syntaxe spécifique à Python 2 ne doit pas être utilisée; la syntaxe Python 3 fonctionnera dans Python 2. Ainsi, les formes suivantes sont obsolètes: <s>

  • exec object
  • exec object in globals
  • exec object in globals, locals

Exécution de code dynamique avec `exec` et` eval` Exemples Liés