Affectation dynamique de variables en Python
En Python, définir dynamiquement des variables locales en modifiant directement le dictionnaire locals() n'est pas une solution viable. Contrairement à la croyance populaire, de telles modifications ne persisteront pas dans la portée de la fonction.
Approches alternatives
Pour définir dynamiquement des variables locales, envisagez d'utiliser l'une des méthodes suivantes :
Dictionnaire
Créer un dictionnaire et attribuer une valeur-clé s'associe dynamiquement :
d = {} d['xyz'] = 42
Attribut d'objet
Utiliser un objet et définir les attributs de manière dynamique :
class C: pass obj = C() setattr(obj, 'xyz', 42)
Modifier
L'accès aux variables dans des espaces de noms non fonctionnels (modules, définitions de classe, instances) implique généralement un dictionnaire recherches. Cependant, les fonctions locales sont optimisées pour la vitesse en précompilant les noms de variables connus du compilateur.
Dans l'implémentation C de Python, l'appel de locals() dans une fonction crée un dictionnaire initialisé avec les valeurs de variables locales actuelles. Ce dictionnaire est mis à jour avec les modifications apportées aux variables locales et est renvoyé lors des appels ultérieurs à locals().
Dans IronPython, les fonctions appelant locals() utilisent un dictionnaire comme magasin de variables locales. Les affectations aux variables locales modifient le dictionnaire, et vice versa. Cependant, lier un nom différent à la fonction locale dans IronPython permet d'accéder aux variables locales de la portée de liaison, pas à celles de la fonction.
Attention
Il est important de noter que l'affectation au dictionnaire renvoyé par locals() peut produire des résultats imprévisibles. S'appuyer sur ces missions est fortement déconseillé.
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!