Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #4852

Re: [Python-de] War die Idee mit Iteratoren/Generatoren wirklich so super?

Path csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail
From Achim Domma <domma@procoders.net>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] War die Idee mit Iteratoren/Generatoren wirklich so super?
Date Tue, 25 Jul 2017 11:35:49 +0200
Lines 88
Message-ID <mailman.22.1500975932.3037.python-de@python.org> (permalink)
References <392f5a95-defa-0f3d-0f1a-d0b554c2fa34@thomas-guettler.de> <453333fe-6382-427e-8837-94d3ece32bcc@procoders.net>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
X-Trace news.uni-berlin.de /RQMWYJAY96NlEsaVTL3qQeKbPtc+CEwuV3NVQwAzzqw==
Return-Path <domma@procoders.net>
X-Original-To python-de@python.org
Delivered-To python-de@mail.python.org
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1
In-Reply-To <392f5a95-defa-0f3d-0f1a-d0b554c2fa34@thomas-guettler.de>
Content-Language en-US
X-PPP-Message-ID <20170725093550.5800.47870@webhosting01.marketing-thom.de>
X-PPP-Vhost procoders.net
X-BeenThere python-de@python.org
X-Mailman-Version 2.1.24
Precedence list
List-Id Die Deutsche Python Mailingliste <python-de.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-de>, <mailto:python-de-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-de/>
List-Post <mailto:python-de@python.org>
List-Help <mailto:python-de-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-de>, <mailto:python-de-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID <453333fe-6382-427e-8837-94d3ece32bcc@procoders.net>
X-Mailman-Original-References <392f5a95-defa-0f3d-0f1a-d0b554c2fa34@thomas-guettler.de>
Xref csiph.com de.comp.lang.python:4852

Show key headers only | View raw


Neben den anderen schon angesprochenen sinnvollen Anwendungsfällen, kann
man mit Generatoren jede Menge lustige Sachen bauen, die in der Regel
aber in komplexeren Frameworks passieren. Hier mal kurz mein
Lieblingsbeispiel, das ich sehr oft mit sehr guten Erfahrungen nutze:

Um Daten zu transformieren, implementieren wir "worker", die Ergebnisse
zu einem Dokument berechnen. D.h. wir haben Listen von Dokument in der Art:

{
  'id': 123,
  'title': 'xyz',
  'abstract': 'mehr text'
}

Die Transformationen sind Funktionen der Art:

def just_do_it(doc):
    return mache_etwas_tolles_mit(doc['title'])

Und dann eben:

results = [just_do_it(d) for d in docs]

Soweit alles super simpel. Aber was machst du, wenn mache_etwas_tolles
ein setup und teardown braucht? Z.B. das Öffnen einer
Datenbankverbindung? Postgres ist ja immer eine gute Idee! ;-)

Die offensichtliche Lösung sind Objekte, Basisklassen, ... Ja das geht,
bläht den Code aber auf und erzeugt "Rauschen", das ich nicht mag. Wir
machen das so:


def worker_factory():
    # hier steht der setup code
    con = open_connection()

    def worker(doc):
        return mache_etwas(doc, con)
    yield worker

    # teardown code
    con.close()


Ich mag es sehr, daß der zusammengehörende Code schön kompakt an einer
Stelle steht. Niemand kann unnötige Objekthierarchien einführen, ...

Zieht man jetzt noch in Betracht, daß ja auch yield ein Ergebnis zurück
liefern kann, das von außen via next mitgegeben wird, kann man Abläufe
bauen, die du anders sicher nicht hinbekommst.

Ob du das willst, ist natürlich eine andere Fragen. Aber bitte laß mir
diese Option! ;-)

Grüße,
Achim


On Tuesday, 25 July, 2017 10:14 AM, Thomas Güttler wrote:
> Anfangs war ich total begeistert von Iteratoren und Generatoren.
> 
> Die Begeisterung ist nicht mehr vorhanden, schließlich ist es nichts
> Neues und darum auch nichts Spannendes mehr.
> 
> Wenn ich zum Debugging etwas untersuchen will, und dann das hier finde:
> 
>   <generator object get_foo_bars at 0x7f1d3bb416e0>
> 
> ... Dann ist ein weiterer "Edit, Compile, Run Cycle" nötig.
> 
> Dieser "Cycle" geht in Python schnell, aber trotzdem nervt es ein
> klitzekleinesbischen.
> 
> Ich frage mich: Bringt der Einsatz von Iteratoren und Generatoren
> wirklich so viel?
> 
> Sicherlich gibt es extreme Beispiele bei denen die Datenmenge nicht in
> den Hauptspeicher passen würde.
> 
> Aber solche Datenmengen habe ich im PostgreSQL, und ich mache auch
> Schleifchen über alle Daten
> in der DB :-)
> 
> Wie seht ihr das?
> 
> Gruß,
>   Thomas
> 

Back to de.comp.lang.python | Previous | Next | Find similar


Thread

Re: [Python-de] War die Idee mit Iteratoren/Generatoren wirklich so super? Achim Domma <domma@procoders.net> - 2017-07-25 11:35 +0200

csiph-web