Aus Modul auf Variable im Hauptprogramm zugreifen

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
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Hallo zusammen,

ich habe eine Frage zu Modulen. Nehmen wir an, ich hätte ein Modul "test.py" und würde dieses im Hauptprogramm (also dem aufrufenden Prg) mit import einbinden:

import test

Wenn ich in diesem Modul eine Variable verwenden möchte, die ich aber im Hauptprogramm definiert habe, bekomme ich stets die Fehlermeldung "log not defined" - wobei <log> der Name der Funktion ist.

Wie kann ich dem Modul beibringen, die Variablen des Hauptprogramms zu kennen?

Das hat sicherlich was mit Namensräumen zu tun...

CU,
API[/code]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.

Lösung: test.py muss die Variablen nicht kennen, denn du nutzt Funktionen mit Parametern, in denen du die Variablen weiterreichst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Leonidas hat geschrieben:Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.
Die gibt es doch bei Python nicht. Bzw. sind sie da kein Problem.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

name hat geschrieben:
Leonidas hat geschrieben:Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.
Die gibt es doch bei Python nicht. Bzw. sind sie da kein Problem.
Warum sollte es das nicht geben bzw. warum sollte es kein Problem sein?
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Das heisst, ich muss alle Variablen, die ich in der Funktion (Modul) verwenden will, auch übergeben?

Gibt es keine Möglichkeit, in dem Hauptprogramm die Variable so zu kennzeichnen, dass sie in einem dazugeladenen Modul auch sichtbar ist?

Ich würde vor allem gerne wissen, wie man so etwas am elegantesten löst. Evtl. ist meine ausgelagerte Funktion ja sowieso keine so gute Lösung.

Es geht um folgendes: Ich habe eine Funktion, die ein Logging durchführen soll. Soll heissen, beim Aufruf der Funktion "log ..." wird anhand der übergebenen Parameter in ein bestimmtes Logfile geschrieben. Diese Funktion wollte ich nun als Modul auslagern.

Im Hauptprogramm aber setze ich den LOG-Level fest. Nur hier kann ich ja entscheiden, mit welchem LOG-Level das Prg laufen soll.

Habe ich jetzt einen Gedanken-Fehler - sprich, löst man das in Python ganz anders? Oder anders ausgedrückt, was wäre denn eine elegante Lösung?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

api hat geschrieben:Gibt es keine Möglichkeit, in dem Hauptprogramm die Variable so zu kennzeichnen, dass sie in einem dazugeladenen Modul auch sichtbar ist?
Wenn das Modul die Variablen ja scheinbar braucht und diese nur im Hauptprogramm definiert werden können, warum hast du es überhaupt in ein Modul ausgelagert. Module heißen nicht umsonst so, der Code sollte eben modular sein, so dass man das Modul importiert, ein paar Parameter übergibt und das Modul nutzen kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Trundle hat geschrieben:
name hat geschrieben:
Leonidas hat geschrieben:Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.
Die gibt es doch bei Python nicht. Bzw. sind sie da kein Problem.
Warum sollte es das nicht geben bzw. warum sollte es kein Problem sein?
Mein Fehler ;) Hab da irgendwann was gelesen unds mir anscheinend nicht richtig gemerkt.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

name hat geschrieben:
Leonidas hat geschrieben:Du müsstest das Hauptprogramm aus dem Modul importieren, aber dabei bekommst du zirkuläre Importe - nicht gut.
Die gibt es doch bei Python nicht. Bzw. sind sie da kein Problem.
Für alle die die Importe testen und feststellen dass es geht: Hier das Beispiel das zeigt, dass es so doch nicht geht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Ok, an der Aussage, dass man nur dann etwas auslagern sollte, wenn es auch alleine lauffähig ist (Parameter-Übergabe eingeschlossen), ist was dran.

Ich hatte halt nur vor, das Logging - welches ich auch für andere Programme nutze, als Modul auszulagern.

Aber dann werd ich halt den LOG-Level aus dem Hauptprogramm stets mitübergeben..
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Nur mal so eine Frage: Das [mod]logging[/mod]-Modul kennst du?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Mir ist die Existenz bekannt.. :)

Aber ich habe es noch nie genutzt. Es ist allerdings wirklich eine Überlegung wert, darauf umzusteigen..

Danke für die Nachfrage..
Antworten