den returnwert einer Funktion im weiteren Verlauf speichern

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
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

Hallo!

Ich habe eine Funktion, die in einem Dict Ergänzungen zufuegen kann. Ich möchte dass dies Ergänzungen halt für den weiteren Verlauf des Gesamtprogramms als Basis mit gespeichert werden.

Ich denke ich müsste dann eig einfach eine neue Variable mit dem returnwert der Funktion in das Programm bauen.
also etwa so :

ergaenzungen()
# das ist die Funktion, die ich erstellt habe ....als return ist 'neues_dict' ---> also ein Dictionary
neu=ergaenzungen()


So funktioniert das aber leider nicht...:/
Wisst ihr, wie das geht, bzw. habt ihr ne Idee??

Vielen Dank schon einmal für Antworten! LG
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Ich habe einen Verdacht. Meine Glaskugel ist jedoch aufgrund von Koffeinmangel etwas trüb. Etwas mehr (überhaupt) Quelltext wäre hilfreich.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Lena hat geschrieben:So funktioniert das aber leider nicht...:/
Deine Problembeschreibung ist nicht wirklich klar.

Nehmen wir mal an, dass folgender Code vorhanden wäre.

Code: Alles auswählen

def add_settings(data):
    data['Z'] = 3
    return data

def main():
    settings = {'A': 1, 'B': 2}
    new_settings = add_settings(settings)

if __name__ == '__main__':
    main()
Das tut prinzipiell was du möchtest, weist aber ein Problem auf. Ein Dictionary ist ein mutable Datentyp. In der Funktion add_settings wird das zurückgegebene Dictionary nicht neu erstellt, sondern das bestehenden Objekt data geändert. Das führt dann dazu, dass in der Funktion main nicht nur new_settings den neuen Wert hat, sondern auch settings, denn beide Namen verweisen auf das gleiche Objekt. In dem Fall würde man daher vom Anwendungsfall abhängig entweder gar keinen Rückgabewert verwenden oder in der Funktion add_settings explizit eine Kopie des Dictionaries erstellen (und der Funktion dann auch noch einen sinnvolleren Namen geben).
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

also es geht ja nur darum, das der Wert, der in return steht in dem weiteren Programm übernommen wird

def new():
alt={"hallo":["hey", "hola"], "tschüsse:["bye", "adios"]}
neu=alt
neues=str(input("Geben Sie ein neues Wort ein."))
neueswort=neues.lower()
#uebungen[wunsch].append(zusatz)
neu[wunsch].append(zusatz)

return (neu)

#also 'alt' steht in dem regulären Programmcode ebenfalls. Ich möchte dass alt dann so durch neu ersetzt wird, dass wenn ich die Funktion erneut aufrufe, ich die Werte die ich vor einer Std geändert habe immer noch da sind, auch wenn ich das Programm zwischenzeitlich geschlossen habe....
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Lena: Du willst also den Inhalt von Deinem Wörterbuch in eine Datei schreiben und sie beim nächsten Programmstart wieder lesen. Dazu bietet sich das json-Modul an, dass Wörterbücher mit Listen und Strings und anderen Basisdatentypen in Dateien schreiben und lesen kann.
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

Das ist jetzt wahrscheinlich eine dumme Frage....aber wie baue ich das in meinen Programmcode ein?

Ich kenn mich leider noch nicht so gut aus :/...
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Lena hat geschrieben:

Code: Alles auswählen

    alt={"hallo":["hey", "hola"], "tschüsse:["bye", "adios"]}
    neu=alt
Bitte setze deinen Code in die passenden Code-Tags damit er korrekt angezeigt wird.

Dieses neu = alt tut nicht das, was du denkst. Ich verweise da auf meinen vorherigen Beitrag. Du erstellst dort keine Kopie von alt, sondern bindest nur zusätzlich den Namen neu an das gleiche Objekt.
Zuletzt geändert von /me am Freitag 26. Juni 2015, 08:21, insgesamt 2-mal geändert.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Lena hat geschrieben:Ich kenn mich leider noch nicht so gut aus :/...
Dann ist das ja eine wunderbare Gelegenheit zum Lernen. Schau dir die Dokumentation zu json an. Mehr als die jetzt hierhin zu kopieren könnten wir auch nicht machen. Wenn dann spezielle Fragen da sind, dann können wir wieder sinnvoll weiterhelfen.
Lena
User
Beiträge: 22
Registriert: Mittwoch 24. Juni 2015, 09:37

muss man das erst downloaden bevor man es importieren kann, oder ist es schon bei python mit drin?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Lena: das kannst Du Dir am einfachsten selbst beantworten, indem Du es ausprobierst.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Lena hat geschrieben:muss man das erst downloaden bevor man es importieren kann, oder ist es schon bei python mit drin?
Wenn du auf der angegebenen Seite oben in die Breadcrumb-Navigation schaust dann siehst du, dass das zum Bereich "The Python Standard Library" gehört. Ergänzend zum Durcharbeiten des Tutorials solltest du zumindest der Übersicht der Standard Library ruhig mal einen Blick gönnen um eine Idee davon zu bekommen was alles dabei ist.
Antworten