Probleme bzgl. Geltungsbereich und IDLE-Shell

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

Hallo da mal wieder,

Bin noch immer fleissig am lernen und am basteln - Python rockt :-)

Aber habe da immer wieder das eine oder andere Problemchen, das mich verfolgt, z.Bsp.:

- kann ich keine eigens erstellten Module im IDLE-Shell importieren; der kennt die einfach nicht... Habe all meine Module im Python-Ordner C:\Python25\Game Development\Power Defense\ abgespeichert. Woran liegt das?

- noch ein Problem mit Modulen resp. Geltungsbereich von Variablen: Wenn ich ein Mainscript erstelle, in welchem ganz oben erst meine Module importiert werden und darunter Konstanten definiert werden, kennen die importierten Module diese Konstanten nicht - ich muss diese Konstanten drum immer dem Modul mitgeben als Parameter... dies resultiert zum Teil in endloselangen Parameter-Schlangen und dies stört natürlich enorm. Wo mache ich da was falsch..? Zum Teil habe ich natürlich Module, welche wiederum andere Module importieren und ALL diese Module sollen die im Mainscript definierten Konstanten kennen... wie kann ich dies erreichen?

- ich habe eigens definierte Funktionen. Nun war Python eine Zeit lang so toll, dass es, wenn ich eine eigene Funktion aufrufe, diese gleich dokumentiert (der DOCSTRING poppt als kleines Fenster auf). Nun ist dem aber nicht mehr so... oder macht es das nur im Shell und in den Scripts selbst nicht..?

Wenn mir jemand etwas auf die Sprünge helfen könnte, wäre ich echt froh, denn ich vor allem der Punkt mit den Konstanten behindert mich enorm...

vielen besten Dank vorab und viele Grüsse,


Henry
Ich code, also bin ich.
BlackJack

@Henry Jones Jr.: Module müssen im "Pfad" liegen, damit man sie importieren kann. Dass heisst in einem der Verzeichnisse die in `sys.path` stehen. Und normalerweise ist das so konfiguriert, dass man auch Module importieren kann, die im aktuellen Arbeitsverzeichnis stehen.

Die Konstanten solltest Du nicht im Hauptmodul stehen haben wenn Du sie in anderen Modulen benötigst. Das würde ja letztendlich auf zirkuläre Importe hinauslaufen -- Hauptmodul importiert andere Module und die müssten das Hauptskript importieren um an die Konstanten zu kommen. Das ist keine gute Idee. Lagere Sachen die Du in mehreren Modulen benötigst ihrerseits wieder in ein eigenes Modul aus. `pygame` macht das ja zum Beispiel mit `pygame.constants` vor.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Zu erstens hat BlackJack völlig recht, wenn du IDLE 'normal' startest ist das aktuelle Verzeichnis 'idlelib', kannst das ja mal prüfen:

Code: Alles auswählen

import os; os.path.abspath(os.curdir)
Du könntest hier einfach den Pfad mit 'os.chdir' zu deinem Arbeitspfad wechseln. (Bitte aber sowas nicht in Scripten bringen)

Zum dritten Punkt kann ich nur raten, entweder nicht als '.py' abgespeichert oder du musst mal deine Anwendung ausführen, damit der Bytecode geladen werden kann. - Da hackt es manchmal bei dem IDLE Editor.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

Hi BlackJack,

danke für die nette Soforthilfe :-)

Dann würde es sich eher empfehlen, ein "Konstantenmodul" zu skripten und alle Module jeweils diese Konstanten importieren zu lassen..? hmmm... nett.

Das hilft mir schon etwas weiter denke ich, vielen Dank.

Gruss,


Henry
Ich code, also bin ich.
Antworten