Liebes Mastodon: Wann benutze ich Generatoren in #python ? Ich weiß wie ich die schreibe aber ich weiß nie wann ich sie nutzen sollte? Aber vielleicht habe ich kaum Nutzfälle

@bithive AFAIK wenn du schelleres / speicherschonenderes Itterieren / schleifen über etwas benötigst, was aufzählbar ist bzw. erst bei Anfrage gebildet werden soll.

@blub Genau - aber in der Praxis, habe ich das nie. Deshalb wundere ich mich ob ich das nicht verstanden habe.

Sehr oft mache ich list comprehension - ich glaube wenn ich die [] durch () ersetze habe ich auch einen generator, aber wo ist der vorteil - (Speicher habe ich meist genug)

@bithive @blub Nehmen wir mal an, du iteriers über die Zeilen einer Datei, um einen bestimmten Eintrag zu finden. Dabei wird jede Zeile vielleicht noch in ein Objekt umgewandelt, was etwas Rechenzeit beansprucht. Weiter angenommen, der gesuchte Eintrag ist in Zeile 145, die Datei ist aber 10000 Zeilen lang und nachdem der Eintrag gefunden ist, bricht der Loop ab. (1/2)

@bithive @blub
Mit list comprehension muss nun zuerst die teure Verarbeitung 10000 Mal gemacht werden, bevor die Suche starten kann, mit einem Generator wird bei jeder Iteration nur eine Zeile verarbeitet und so sind insgesamt nur 145 Verarbeitungsschritte notwendig. (2/2)

@SevenOfNein

aber auch nur wenn du weißt, dass es genau einmal drinnen ist oder?

@bithive ja. Soll ja auch nur ein konstruiertes Beispiel sein, um zu zeigen, das es sinnvolle Anwendungen gibt.

@SevenOfNein Das Problem hab ich immer wenn ich denke; ah ich könnte einen generator nutzen - mist ich brauche eh alle Ergebnisse

Follow

@bithive @SevenOfNein bissl off-topic, aber ich hatte letztens erst die Erkenntnis, dass `list(sorted(…))` ja unnötig ist, weil `sorted` immer schon eine Liste zurück gibt. Ich dachte immer, sorted liefert nen Iterator, was, wenn man kurz drüber nachdenkt, ja völlig unlogisch wäre. 🤯

@fabian entweder ist es sorted oder sort das gar nichts zurückgibt sondern die Liste ändert, das verwirrt mich immer

Sign in to participate in the conversation
FLOSS.social

For people who care about, support, or build Free, Libre, and Open Source Software (FLOSS).