__main__ und der Festlegung des lösungsumfangs in python

War ich irgendwie überrascht, indem Sie das folgende Verhalten:

def main():
    print "%s" % foo

if __name__ == "__main__":
    foo = "bar"
    main()

d.h. eine Modul-Funktion hat Zugriff auf die umschließenden Variablen in der __main__. Was ist die Erklärung dafür?

  • Es gibt keinen Spielraum __main__. Es gibt eine if passiert, zu vergleichen eine variable, die passiert werden genannt __name__ zu etwas, das passiert zu sein, das string-literal "__main__".
  • __main__ ist ein Modul, und jedes Modul verfügt über einen zugeordneten Bereich. Versuchen import __main__; type(__main__) im interpreter (nicht in IPython).
  • Ich weiß. OP sollte wissen, an einem gewissen Punkt. Aber es schien mir OP statt verwirrt, wenn Aussagen über Teile der Bedingung und denke if führt einen neuen Bereich - was würde sein, zu einem immer dringlicheren Thema. (Zugegeben, "Es gibt keinen Spielraum __main__ ist irreführend, streng genommen)
  • du hast Recht. Im Nachhinein, ich weiß nicht, warum ich verwirrt war. Vielleicht ist das Debuggen von code auf 3 ein.m ist keine so gute Idee, nachdem alle 🙂
  • Ich stolperte über genau dem gleichen Verhalten...dachte, ich wäre verrückt. Froh zu sehen, hat jemand bereits diese Frage gestellt! Das Verhalten ist offensichtlich, wenn die Antwort erklärt...
Schreibe einen Kommentar