Was import
in bar.py
tut, ist eine Kennung i
im bar.py
Modul Namensraum genannt, die i
als Kennung an die gleiche Adresse verweist eingerichtet im foo.py
Modul Namensraum genannt.
Dies ist ein wichtiger Unterschied ... bar.i
verweist nicht auf foo.i
, sondern auf den gleichen Platz im Speicher, wo das Objekt 10
wird festgestellt, dass foo.i
bis zur gleichen Zeit Punkt passiert. In Python sind die Variablennamen nicht der Speicherplatz ... sie sind der Bezeichner, der auf einen Speicherbereich zeigt. Wenn Sie in bar importieren, richten Sie eine lokale Namespace-ID ein.
Ihr Code verhält sich wie erwartet bis foo.fi()
aufgerufen wird, wenn die Kennung i
im foo.py Namespace wörtlichen 99 Punkt geändert wird, die ein Objekt im Speicher ist offensichtlich an einem anderen Ort als 10. Nun das Modul -level Namespace dict für foo
hat i
identifiziert ein anderes Objekt im Speicher als der Bezeichner i
in bar.py.
Shane und rossfabricant haben gute Vorschläge, wie Sie Ihre Module anpassen können, um zu erreichen, was Sie wollen.
Die Ausgabe ist wie folgt: 10 10 \ n 10 99 –
die Frage ist nicht wirklich klar. Benutze einfach foo.i, was genau ist das Problem? Faulheit? – hasen
Dies ist eine ziemlich klare Anfängerfrage. Er will, dass ich 99 bin, nachdem er foo.fi() angerufen hat. Ich denke, dass ihm die Ausführung des Moduls fehlt. +1 zu neutralisieren. –