Quelle est la différence entre globals(), locals(), et vars()?
Quelle est la différence entre globals()
, locals()
, et vars()
? Que font-ils de retour? Mise à jour des résultats utiles?
- peut-on mettre à jour aucune de ces en python 3, et ont le script fonctionne réellement?
Vous devez vous connecter pour publier un commentaire.
Chacun de ces retour d'un dictionnaire:
globals()
toujours retourne le dictionnaire de la module espace de nomslocals()
toujours retourne un dictionnaire de la actuel espace de nomsvars()
retourne un dictionnaire de l'espace de noms courant (si la fonction est appelée sans argument) ou la dictionnaire de l'argument.locals
etvars
pourrait utiliser un peu plus d'explication. silocals()
est appelée à l'intérieur d'une fonction on construit un dictionnaire de la fonction de l'espace de noms à partir de ce moment, et le renvoie -- en plus de l'affectation du nom sont pas reflète dans le retour de dictionnaire, et toutes les assignations à le dictionnaire sont pas reflétée dans le local de l'espace de noms:nous donne:
Deux remarques:
exec "pass"
ligne dans la fonction.Si
locals()
est appelé à l'extérieur une fonction qu'il retourne la vraie dictionnaire de l'espace de noms courant. D'autres changements à l'espace de noms sont reflète dans le dictionnaire, et les changements dans le dictionnaire sont reflète dans l'espace de noms:nous donne:
Jusqu'à présent, tout ce que j'ai dit à propos de
locals()
est également vrai pour lesvars()
... voici la différence:vars()
accepte un seul objet comme argument, et si vous lui donner un objet qu'elle renvoie la__dict__
de cet objet. Si l'objet a été pas une fonction de__dict__
retourné, c'est que l'objet de l'espace de noms:qui nous donne:
Si l'objet était une fonction, vous obtenez toujours ses
__dict__
, mais à moins que vous êtes en train de faire plaisir et de choses intéressantes c'est probablement pas très utile:qui nous donne:
vars()
oulocals()
dictionnaire appelé dans une fonction si vous utilisezeval()
. Par exemple:def test(): huh = locals(); huh['d'] = 4; print eval('d')
affiche 4 lorsquetest()
est exécuté!dict
(retourné par lalocals()
) se trouve être reflété dans l'espace de noms local et des changements de l'espace de noms local se trouve être reflété dans ledict
(dans mon python). La seule chose est que la spécification ne garantit pas ce comportement.vars
est à venir à partir de__builtins__
module sans l'importation du module(la magie). Où estlocals
&globals
en venir?locals
etglobals
sont également en__builtins__
.site:docs.python.org namespace