Seite 1 von 1

Dictionary: Value als Variable?

Verfasst: Sonntag 5. Dezember 2021, 12:32
von HeinzBacker
Hi,

im Dict ist ja der Value vom Typ mutable und sollte auch eine Variable sein dürfen:

Code: Alles auswählen

wert_haus1=None
wert_haus2=None

werte_dict = {
  "Haus1": wert_haus1,
  "Haus2": wert_haus2
}

Das Dict ist global und dem Interpreter seit Anfang an bekannt. Der Inhalt von wert_haus1 zB wird aber erst später festgelegt. Starten tut das ganze mit den None-Typen.

Schreibe ich jedoch später die wert_haus1 Variablen, so enthält mein Dict immernoch den None-Typ. Es liegt hier also keine Speicheradresse als Value vor, oder wie kann man das verstehen?

Re: Dictionary: Value als Variable?

Verfasst: Sonntag 5. Dezember 2021, 13:05
von sparrow
Das vorgehen ist ein bisschen seltsam, weil du Variablen durchnummerierst und dann auch noch deren Werte an durchnummerierte Keys in einem dict bindest. Das wirkt so, als wäre die Art der Datenstruktur falsch.

Die Aussage "im Dict ist ja der Value vom Typ mutable" ist falsch.
Der Typ des Values hängt natürlich von dem ab, was der Value ist.

Code: Alles auswählen

ham = "Ham"
spam = ham  # der Wert von ham wird an spam gebunden
spam = "Spam"  # ein neues Stringliteral wird an den Namen spam gebunden
Selbstverständlich wird ham hier nicht verändert.
Genausowenig in einem dict.

Re: Dictionary: Value als Variable?

Verfasst: Sonntag 5. Dezember 2021, 13:09
von __deets__
Der Fehler ist zu denken das dict speichert einen Bezug auf die Variable. Das stimmt nicht. Es speichert den Bezug auf das Objekt (None in deinem Beispiel), auf den auch die Variable sich bezieht. Nur weil du die Variable später auf etwas anders zeigen lässt, ändert das keine anderen Bezüge.

Re: Dictionary: Value als Variable?

Verfasst: Sonntag 5. Dezember 2021, 13:27
von HeinzBacker
ja, ich müsste eigentlich eine Adresse in das Dict legen. Aber das geht dann wahrscheinlich nicht..

Re: Dictionary: Value als Variable?

Verfasst: Sonntag 5. Dezember 2021, 13:33
von __deets__
Nein, das geht nicht. Was geht ist ein anderes Veraenderbares Objekt reinzulegen, und das zu veraendern. Aber das klingt alles nach einem sehr deutlichen "Code-Smell". Was fuer ein Problem soll hier geloest werden?

Re: Dictionary: Value als Variable?

Verfasst: Sonntag 5. Dezember 2021, 15:16
von __blackjack__
„Das Dict ist global […] Der Inhalt von wert_haus1 zB wird aber erst später festgelegt.“ klingt schon falsch weil das auf globale Variablen hinaus läuft. Was global auf Modulebene existiert sollte Konstant sein und sich später nicht mehr ändern, auch indirekt der Inhalt von solchen Datenstrukturen nicht.

Re: Dictionary: Value als Variable?

Verfasst: Sonntag 5. Dezember 2021, 15:18
von HeinzBacker
ich lese eine ini Datei mit Benutzerwerten ein - die sollen dann Teil des Dicts sein. Dies passiert aber erst nachdem ich das Dict schon definiert habe.

Re: Dictionary: Value als Variable?

Verfasst: Sonntag 5. Dezember 2021, 15:25
von sparrow
Dann gehört das, wie __blackjack__ schon schreibt, nicht auf Modulebene und sollte nicht global sein.
Und ich sehe die Notwendigkeit auch nicht, die Daten an zwei verschiedene Namen zu binden.

Re: Dictionary: Value als Variable?

Verfasst: Sonntag 5. Dezember 2021, 22:04
von Sirius3
@HeinzBacker: das hört sich wieder falsch an. Die Werte der ini-Datei definieren das Wörterbuch; Strukturen mit Dummywerten zu erstellen, um sie später zu ersetzen macht man in Python nicht.