2010-09-27 8 views

Répondre

9

Il est possible, parfois, mais il est généralement une très mauvaise idée. En dépit de leur nom, les variables elles-mêmes ne devraient pas être variables. Ils font partie de votre code, une partie de sa logique. Essayer de 'remplacer' les variables locales de cette façon rend le code inefficace (puisque Python doit abandonner certaines de ses optimisations), bogué (puisqu'il peut accidentellement remplacer quelque chose que vous n'attendiez pas), très difficile à déboguer (puisque vous ne pouvez pas voir ce qui se passe) et illisible. Avoir des «valeurs dynamiques» est ce que les dicts et les listes et autres conteneurs sont pour.

+0

"C'est possible, parfois" -> Alors, comment? :) – fuenfundachtzig

+0

Comme dans la discussion des autres réponses, vous pouvez le faire à 'globals()', ce qui est une très mauvaise idée, et vous pouvez le faire avec 'exec', qui est un idée phénoménalement terrible. Sérieusement, les 'variables variables' sont une énorme erreur, encore plus problématique dans Python que dans d'autres langages. Il n'y a presque jamais un bon usage pour eux. J'ai déjà fait toutes sortes d'introspections et de hacks de génération de code en Python, et je n'en ai jamais eu besoin. Vous avez des dicts et vous pouvez faire fonctionner un dictionnaire avec un accès de type objet; vous ne devriez pas avoir besoin de variables-variables. – bobince

1

Je pense que cela fonctionne:

locals().update(vars) 
+2

Généralement (ce qui signifie à l'intérieur des fonctions), locals() vous donne une copie de l'espace de noms local. La modifier ne modifie pas l'espace de noms local. –

+2

"Le contenu de ce dictionnaire ne doit pas être modifié, les modifications peuvent ne pas affecter les valeurs des variables locales et libres utilisées par l'interpréteur." http://docs.python.org/library/functions.html#locals – Skilldrick

+0

Mais avec 'globals()' devrait fonctionner, n'est-ce pas? – Ricardo

Questions connexes