was ist in python eigentlich besser ?

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.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@snafu
Es ging mir Haupsächlich um Stilistische fragen (zumindest am anfang, jetzt hat sich es leider etwas ausgedehnt) und das würde ich einer Gruppe zuordnen und nicht zehn verschieden.

@lunar
Ok, am besten mach ich an den stellen wo ich mir nicht sicher bin mal ein paar geschwindigkeits test bzw. pass es der Sachlage an.
Im Prizip also so wie ich es bisher gemacht habe.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

IMHO hast du Lunar nicht verstanden. Er sprach im Wesentlichen davon, dass eine Ausnahme auch wirklich als ein seltener Fall angesehen werden sollte. Hinzu kommt, dass Exception-Handling relativ teuer ist. Dementsprechend solltest du eben nicht das beibehalten, was du bisher gezeigt hast.

Zur Vermeidung doppelter Lookups wurde ja schon `dict.get()` genannt, welches standardmäßig `None` bei einem nicht-existenten Schlüssel zurückliefert anstatt eine Ausnahme zu werfen. Für Objektattribute gibt es analog dazu `getattr(obj, attrname, None)`.

Es kommt aber sicher auf den Einzelfall an, ob man nach Versuch-und-Irrtum vorgeht oder explizit auf Bedingungen testet.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Das meinte ich doch mit [...pass es der Sachlage an.]

Die ganzen try...excepts.. habe ich bisher nur einmal benutzt un nirgendwo sonst.
Diese Sachen am Anfang waren sachen die mir mir ständig wieder begegnet sind und wissen wollte ob es dazu etwas allgemein gültiges gibt.

und ja .get() hört sich gut an, aber bei den kleinen dicts die ich bisher hatte wäre eine doppelte prüfung mit "in" sowieso nicht aufgefallen in der Zeit.

So damit ihr mir nochmal sagen könnt das ich falsch liege fasse ich das mir hier nochmal zusammen. :mrgreen:

- try...except... kostet Zeit
- sind aber Prinzipiell in Python erwünscht
- sollten aber nicht bei zu häufigen auftreten der Exceptions nicht genutz werden, wenn man eine andere Möglichkeit hat

- "in" statement um zuprüfen ob sich ein key in einer dict befindet nur dann Sinnvoll wenn man den Wert hinter dem Key nicht benötigt
- da man sonst zweimal auf die dict zugreifen muss
- also .get() nutzen

so ungefähr ?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Xynon1 hat geschrieben:- "in" statement um zuprüfen ob sich ein key in einer dict befindet nur dann Sinnvoll wenn man den Wert hinter dem Key nicht benötigt
- da man sonst zweimal auf die dict zugreifen muss
- also .get() nutzen
Würde ich so nicht sagen. Sondern:
- get() lässt sich nicht immer einsetzen. Soll beispielsweise nur dann ein Wert ausgegeben werden, wenn es dazu einen Schlüssel im dict gibt, hilft get() nicht weiter.
- get() ist elegant und ich nutze es auch gerne; aber schneller als ein zweifacher Zugriff auf das dict ist es leider nicht.
- evtl. wäre hier noch defaultdict zu nennen; damit geht manches noch eleganter, aber nicht schneller (eher im Gegenteil).

Zusammenfassung: Muss es wirklich schnell gehen, dann ist die Prüfung mit "in" und das anschließende Abrufen oder Zuweisen des Wertes selbst bei ziemlich großen dicts in der Regel die beste Lösung.
Kommt es nicht so sehr auf die Performance an, sind get() und defaultdict auf jeden Fall eine Überlegung wert.
Antworten