Kleine Verständnisfrage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
TheGrudge
User
Beiträge: 89
Registriert: Donnerstag 4. Mai 2006, 18:39

Donnerstag 4. Mai 2006, 19:02

Hallo,

ich bin neu in der Python-Welt, und auch neu in diesem Forum, deswegen erst einmal ein freundliches "Hallo"!!! :P

Ich habe eigentlich auch kein wirkliches Problem, nur eine allgemeine Verständnisfrage.

Wenn ich in einem Modul (nennen wir es module1) ein anderes Modul, sagen wir mal os, importiere und nun in dem Toplevel-File

Code: Alles auswählen

import module1
ausführe, dann habe ich das os-Modul doch schon geladen. OS lebt aber dann nur im Namespace von dem importierten Modul, nicht im Toplevel.

Wenn ich nun also os im Toplevel brauche, muss ich nochmal

Code: Alles auswählen

import os
ausführen. So weit so gut....

Jetzt meine eigentliche Frage:
Wurde nun os 2mal importiert bzw geladen oder wird im Toplevel nur noch eine Referenz auf das schon geladene os-Modul gelegt??

Das habe ich irgendwie noch nicht ganz verstanden.
Ich weiss auch das ein import des gleichen Moduls in einem File nicht 2mal ausgeführt werden kann, sondern ich muss dafür reload() benutzen.

Ich hoffe ihr habt meine Frage verstanden, manchmal drücke ich mich ääähhh komisch aus... :lol:
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Donnerstag 4. Mai 2006, 19:06

Ich hab deine Frage zwar nicht ganz verstanden, aber meinst du sowas hier:

Code: Alles auswählen

from os import system
mfg

Thomas :-)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 4. Mai 2006, 19:08

TheGrudge hat geschrieben:Jetzt meine eigentliche Frage:
Wurde nun os 2mal importiert bzw geladen oder wird im Toplevel nur noch eine Referenz auf das schon geladene os-Modul gelegt??
Nein, du bekommst nur eine weitere Referenz für das gleiche Modul zurück. Das hast du schon ganz richtig verstanden.

Du solltest reload() nicht benutzen, wenn du dich nicht wundern willst, warum einige Sachen ganz seltsamerweise dann nicht funktionieren. Denn reload() ist nicht ganz perfekt und kann natürlich vorhandene Objekte die du als der alten Version des Moduls instanziiert hast nicht löschen und auch nicht neu erstellen. Aber man kann dein Problem sicherlich anders lösen, wenn es nun wirklich Codereload sein muss.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
TheGrudge
User
Beiträge: 89
Registriert: Donnerstag 4. Mai 2006, 18:39

Donnerstag 4. Mai 2006, 19:11

Neee ich glaube nicht... :D

Also ich meine eigentlich, wenn ein Modul ein anderes einbindet, und ich binde das selbe Modul in einem anderen nochmal ein:
main.py -> import os, import module1
module1.py -> import os
In dem Beispiel wird im gesamten Programm os 2mal eingebunden.
Ist nun os auch 2mal geladen oder nur einmal und der zweite import erstellt nur eine Referenz?
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Donnerstag 4. Mai 2006, 19:13

Aso, ja du hast recht, der 2. import ist dann nur eine Referenz.
mfg

Thomas :-)
Benutzeravatar
TheGrudge
User
Beiträge: 89
Registriert: Donnerstag 4. Mai 2006, 18:39

Donnerstag 4. Mai 2006, 19:14

Leonidas hat geschrieben:
TheGrudge hat geschrieben:Jetzt meine eigentliche Frage:
Wurde nun os 2mal importiert bzw geladen oder wird im Toplevel nur noch eine Referenz auf das schon geladene os-Modul gelegt??
Nein, du bekommst nur eine weitere Referenz für das gleiche Modul zurück. Das hast du schon ganz richtig verstanden.

Du solltest reload() nicht benutzen, wenn du dich nicht wundern willst, warum einige Sachen ganz seltsamerweise dann nicht funktionieren. Denn reload() ist nicht ganz perfekt und kann natürlich vorhandene Objekte die du als der alten Version des Moduls instanziiert hast nicht löschen und auch nicht neu erstellen. Aber man kann dein Problem sicherlich anders lösen, wenn es nun wirklich Codereload sein muss.
D A N K E ! ! !
Ich will reload() gar nicht benutzen, ich meine nur mal gelesen zu haben das dies notwendig ist wenn man ein modul nochmal per import nutzen möchte, warum auch immer....

OK, dann habe ich das richtig verstanden,lese nämlich ein englisches Python-Buch (Learning Python, O'Reilly) und kam in dem Kapitel nicht so richtig mit. Kann zwar englisch, aber gerade technische Bücher sind manchmal etwas schwierig.!
D A N K E ! ! !
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 4. Mai 2006, 19:34

TheGrudge hat geschrieben:Ich will reload() gar nicht benutzen, ich meine nur mal gelesen zu haben das dies notwendig ist wenn man ein modul nochmal per import nutzen möchte, warum auch immer....
Ja, das stimmt. Allerdings gelten an dieser Stelle eben die genannten Einschränkungen.
TheGrudge hat geschrieben:D A N K E ! ! !
Klar, nette Fragen beantwortet man doch gern 8) Deine war gut verständlich. Achja und: willkommen im Forum!
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten