Grundlage für größeres Programm - was verbessern?

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.
Mephisto
User
Beiträge: 28
Registriert: Mittwoch 17. Januar 2007, 15:52

Beitragvon Mephisto » Dienstag 17. April 2007, 16:49

Ich würde nein sagen, da es noch eine ganze Weile dauern wird bis Python 3000 erscheint. Und eine solch einfache Änderung bewältigt jeder Texteditor der über eine Suchen und Ersetzen Funktion verfügt :)

greets meph
BlackJack

Beitragvon BlackJack » Dienstag 17. April 2007, 16:52

@rolgal_reloaded: Jup, die Aussagen stimmen so.

Wie immer gibt's Ausnahmen: Wenn Du über Schlüssel, Werte oder Paare davon iterierst und die das Dictionary in der Schleife veränderst, dann kann es Probleme geben. Ähnlich wie bei Listen über die man nicht (vorwärts) iterieren sollte wenn man in der Schleife Listenelemente entfernt.
rolgal_reloaded
User
Beiträge: 309
Registriert: Dienstag 24. Oktober 2006, 19:31

Beitragvon rolgal_reloaded » Dienstag 17. April 2007, 18:57

BlackJack hat geschrieben:@rolgal_reloaded: Jup, die Aussagen stimmen so.

Wie immer gibt's Ausnahmen: Wenn Du über Schlüssel, Werte oder Paare davon iterierst und die das Dictionary in der Schleife veränderst, dann kann es Probleme geben. Ähnlich wie bei Listen über die man nicht (vorwärts) iterieren sollte wenn man in der Schleife Listenelemente entfernt.


Denke das habe ich.

Dann stimmt wohl auch, dass das aktuelle Element nachdem es in der Schleife abgearbeitet wurde, sofort aus dem Speicher gelöscht wird, oder?
Sonst wäre es wohl kein so immenser Performancegewinn :?:

Wenn weiters richtig, dann sind die itermethoden auch sehr interessant, wenn innerhalb einer Endlosschleife (while True) z. B. bei einem Vokabeltrainer diese auf Grund einer bestimmten Bedingung verlassen wird (10 Vokabeln hintereinander richtig - Lektionswechsel - neues Dict laden).
Klar und richtig was ich meine?

LG

rolgal_reloaded
BlackJack

Beitragvon BlackJack » Dienstag 17. April 2007, 19:45

Aus dem Speicher gelöscht wird das Element nicht, es ist ja immer noch im Dictionary. Die Elemente werden ja nur an die Namen in der Schleife gebunden und nicht kopiert.
rolgal_reloaded
User
Beiträge: 309
Registriert: Dienstag 24. Oktober 2006, 19:31

Beitragvon rolgal_reloaded » Dienstag 17. April 2007, 20:42

Ich meinte natürlich nicht, dass es aus dem Dictionary gelöscht wird.
Aber aus dem Arbeitsspeicher heisst ja nicht aus dem Dictionary :?: :!:

Oder habe ich da technisch was falsch verstanden?

Also ich meine: das muss ja speichertechnisch irgendwie anders verwaltet werden, wie kann es sonst zu einer Steigerung der Performance kommen?
Denn es geht ja darum, dass nicht die ganze Liste auf einmal erzeugt wird bzw. immer nur das aktuelle Element zur Verfügung steht.

Schwierig das in Worte zu fassen :D


LG

r_r
BlackJack

Beitragvon BlackJack » Dienstag 17. April 2007, 22:28

Aber man kann doch auch nichts aus dem Arbeitsspeicher löschen wenn es noch in einer Datenstruktur referenziert wird. Was sollte denn dann passieren wenn man über das Dictionary auf das Objekt zugreift!?

Bei den `iter*()`-Methoden wird keine Liste erstellt. Die würde Speicherplatz verbrauchen. Und um die Liste zu erstellen muss einmal über alle Elemente des Dictionary iteriert werden. Wenn man diese Liste dann in einer Schleife verwendet wird ein zweites mal über alle Elemente iteriert. Also gibt's ohne Liste auch einen Geschwindigkeitsgewinn.
rolgal_reloaded
User
Beiträge: 309
Registriert: Dienstag 24. Oktober 2006, 19:31

Beitragvon rolgal_reloaded » Dienstag 17. April 2007, 22:35

BlackJack hat geschrieben:Aber man kann doch auch nichts aus dem Arbeitsspeicher löschen wenn es noch in einer Datenstruktur referenziert wird. Was sollte denn dann passieren wenn man über das Dictionary auf das Objekt zugreift!?


Eigentlich logisch, gut dass ich nachgefragt habe bevor ich in eine falsche Richtung weiterdenke.

BlackJack hat geschrieben:Bei den `iter*()`-Methoden wird keine Liste erstellt. Die würde Speicherplatz verbrauchen. Und um die Liste zu erstellen muss einmal über alle Elemente des Dictionary iteriert werden. Wenn man diese Liste dann in einer Schleife verwendet wird ein zweites mal über alle Elemente iteriert. Also gibt's ohne Liste auch einen Geschwindigkeitsgewinn.


Auch wunderbar erklärt, danke.

Also wäre folgendes eines von vielen konkreten Veranschaulichungen, oder?

Wenn weiters richtig, dann sind die itermethoden auch sehr interessant, wenn innerhalb einer Endlosschleife (while True) z. B. bei einem Vokabeltrainer diese auf Grund einer bestimmten Bedingung verlassen wird (10 Vokabeln hintereinander richtig - Lektionswechsel - neues Dict laden).


LG

rolgal_reloaded
BlackJack

Beitragvon BlackJack » Mittwoch 18. April 2007, 08:27

Jup, wenn das Vokabeldictionary 1000 Einträge enthält und man nach 20 die Schleife abbricht, hat man bei `iter*()` auch nur diese 20 "angefasst".

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder