Seite 1 von 1

Variablen über ein importiertes Modul erzeugen

Verfasst: Dienstag 27. Juli 2021, 17:49
von capill
Moin wertes Forum,

ich habe einen Algorithmus geschrieben (als Funktion mit Unterfunktionen), der die Aufgabe hat, zwei Parameter (a und b) einer Modellfunktion an Messwerte anzupassen (ähnlich den Modul Curve-Fit aus Scipy) um anschließend eine passende Ausgleichkurve zu plotten. Diese errechneten Parameter werden in entsprechenden Variablen gespeichert. Nun möchte ich diesen Algorithmus als Modul in anderen Dateien verwenden, in denen entsprechende Messwerte liegen. Allerdings stehe ich jetzt vor dem Problem, dass ich nicht weiß, wie ich diese Variablen (a und b) an die Datei, in der ich den Algorithmus importiert habe, übergeben kann. Globale Variablen sind offensichtlich nur auf das Modul begrenzt.

Ich möchte unbedingt vermeiden irgendwelche Codeschnipsel aufzusammeln, ohne genau zu wissen was sie tatsächlich bewirken. Mit Klassen kenne ich mich derzeit noch nicht aus - daher hoffe ich auf eine einfache Lösung.

Das Kernproblem in Kurzform:
Variablen einer Datei mit einem importierten Modul erzeugen.

Vielen Dank für eure Hilfe.

Re: Variablen über ein importiertes Modul erzeugen

Verfasst: Dienstag 27. Juli 2021, 18:40
von __deets__
Als Argumente an Funktionen. Globale Variablen sollte man nie verwenden.

Re: Variablen über ein importiertes Modul erzeugen

Verfasst: Dienstag 27. Juli 2021, 18:50
von capill
Das auf globale Variablen möglichst verzichtet werden sollte, habe ich bereits verinnerlicht - funktioniert an dieser Stelle auch nicht (ich habe es versucht :P). Die Ausgabe der Variablen a und b als Rückgabewert der Funktion ist hier auch unpraktisch, da soweit ich weiß, nur ein Parameter, bzw. ein Tupel zurückgegeben werden kann.

Das ganze soll wie folgt ablaufen:

1. Die Messdaten importieren
2. eine Modellfunktion aufstellen (in denen die zu bestimmenden Parameter enthalten sind)
3. Den Algorithmus (als importiertes Modul) ausführen
4. Das Modul erzeugt die beiden Variablen a und b (die Parameter für die Modellfunktion) in der aktuellen Datei.

Anschließend kann die angepasste Modellfunktion geplottet werden.

das Ganze funktioniert einwandfrei - solange der Code des Algorithmus in der Datei enthalten ist. Ich möchte aber aus verständlichen Gründen die Möglichkeit haben, einfach den Algorithmus als Modul zu importieren.

Re: Variablen über ein importiertes Modul erzeugen

Verfasst: Dienstag 27. Juli 2021, 19:34
von rogerb
@capill,

es wäre einfacher, wenn du wenigstens einen Auszug des bestehenden Programms hier posten könntest.
Die Ausgabe der Variablen a und b als Rückgabewert der Funktion ist hier auch unpraktisch, da soweit ich weiß, nur ein Parameter, bzw. ein Tupel zurückgegeben werden kann.
Warum ist das unpraktisch? Du kannst doch die beiden Variablen dann wieder aus dem Tuple entpacken:

Code: Alles auswählen

# im zu importierenden modul
def curvefitting(measurements):
    ...
    # a und b berechnen
    return a, b


# im importierenden modul
from anderes_modul import curvefitting

a, b = curvefitting(measurements)
Statt Variablen aus einem anderen Modul zu importieren, importiert man die Funktion und führt sie im Hauptmodul aus mit den Messwerten als Eingangsparametern und a und b als Rückgabewerten.

Re: Variablen über ein importiertes Modul erzeugen

Verfasst: Dienstag 27. Juli 2021, 19:50
von capill
Warum ist das unpraktisch? Du kannst doch die beiden Variablen dann wieder aus dem Tuple entpacken:
Ich wollte möglichst viele "Extra-Schritte" vermeiden. Es sollte einfach nur der das importierte Modul ausführt werden, aber...

Code: Alles auswählen

# im zu importierenden modul
def curvefitting(measurements):
    ...
    # a und b berechnen
    return a, b


# im importierenden modul
from anderes_modul import curvefitting

a, b = curvefitting(measurements)
Statt Variablen aus einem anderen Modul zu importieren, importiert man die Funktion und führt sie im Hauptmodul aus mit den Messwerten als Eingangsparametern und a und b als Rückgabewerten.
... so hatte ich das noch gar nicht versucht - wohl aus Unwissenheit. Das Funktioniert allerdings hervorragend und sollte auf den ersten Blick meine Probleme lösen. Vielen Dank dafür - wieder etwas dazugelernt!

Re: Variablen über ein importiertes Modul erzeugen

Verfasst: Dienstag 27. Juli 2021, 21:34
von nezzcarth
Wenn man etwas mehr Struktur haben, aber keine eigene Klasse schreiben möchte, kann man für solche Rückgabe-Objekte auch ein namedtuple verwenden (https://docs.python.org/3/library/colle ... namedtuple).