La fonction exec présente un comportement distinct entre Python 2 et Python 3. Dans Python 2, exec est une instruction, tandis que dans Python 3, il est devenu une fonction. Cette distinction a des implications significatives pour son interaction avec les variables locales.
Dans Python 2, l'instruction exec permet la modification des variables locales dans la portée d'une fonction. Lorsque l'instruction exec est exécutée, le compilateur Python désactive temporairement les optimisations de portée locale et passe à une stratégie de recherche plus lente pour accéder aux variables locales et globales. De plus, toutes les variables déclarées dans l'instruction exec sont automatiquement copiées dans les paramètres locaux de la fonction si aucun paramètre global et local explicite n'est fourni.
Dans Python 3, l'exec() la fonction suit strictement les règles de portée de la fonction. Il ne peut plus modifier les variables dans la portée locale d'une fonction, même si elles ont été préalablement déclarées. Locals() est capable de refléter les variables locales dans une direction, mais autoriser les modifications via locals() n'a jamais été pris en charge.
Pour obtenir le comportement souhaité observé dans Python 2, il est nécessaire d'utiliser un espace de noms distinct lors de l'appel à exec() dans Python 3. En transmettant un dictionnaire personnalisé à la fonction exec(), il est possible de modifier et d'accéder aux variables dans cet espace de noms.
Le code suivant montre la bonne façon d'utiliser exec() dans Python 3 :
1 2 3 4 |
|
Cette approche garantit que la portée locale de la fonction reste intacte, tout en autorisant les modifications des variables dans le espace de noms défini.
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!