Raison pour globals() en Python?

Quelle est la raison d'avoir globals() fonction en Python? Il ne renvoie dictionnaire des variables globales qui sont déjà mondial, de sorte qu'ils peuvent être utilisés n'importe où... je vous demande seulement de la curiosité, en essayant d'apprendre le langage python.

def F():
    global x
    x = 1

def G():
    print(globals()["x"]) #will return value of global 'x', which is 1

def H():
    print(x) #will also return value of global 'x', which, also, is 1

F()
G()
H()

Je ne vois pas vraiment le point ici? Seul le temps j'en aurais besoin, si j'avais des variables locales et globales, avec le même nom pour les deux

def F():
    global x
    x = 1

def G():
    x = 5
    print(x) #5
    print(globals()["x"]) #1

F()
G()

Mais vous ne devriez jamais vous rencontrez un problème d'avoir deux variables avec le même nom, et qui ont besoin d'utiliser les deux dans le même champ d'application.

  • "Mais vous ne devriez jamais vous rencontrez un problème d'avoir deux variables avec le même nom, et qui ont besoin d'utiliser les deux dans le même champ d'application." Je ne peux pas suivre cette pensée. C'est la raison pour séparer les espaces de noms, que vous avez variables avec le même nom dans différents champs d'application. Lorsque vous travaillez avec deux d'entre eux, des noms en double sont une chose naturelle, mais pas un problème, comme vous pouvez le préfixe eux.
  • Eh bien, je viens de la famille C++, donc je ne suis pas sûr à propos de Python personnes, mais aussi loin que je peux penser, vous ne devriez pas avoir de global variable qui n'a pas un nom unique. Sûr qu'il y aura des variables avec le même nom, dans le même contexte, que c'était stupide phrase de moi, mais pas de variables globales avec les mêmes noms que ceux des locaux. C'est quand je l'avais utiliser des espaces de noms pour les locaux... Mais vous ne savez pas, si vous le dis.
  • globals est peut-être un peu trompeur. globals() est essentiellement le locals() d'un module. Le plus proche de Python vient de variables globales qui sont véritablement mondiale à tous de votre programme est le __builtin__ module; tout ce que vous ajoutez à ce module est disponible dans tous les espaces de noms partout.
  • Hmm, bien plus, non pas que j'en aurais besoin en ce moment, mais peut-être un jour... Merci 🙂
InformationsquelleAutor | 2012-10-02