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


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

Re: [Python-de] Syntax-Erweiterung für Schleifen in Python3

Path csiph.com!2.eu.feeder.erje.net!feeder.erje.net!1.eu.feeder.erje.net!newsfeed0.kamp.net!newsfeed.kamp.net!fu-berlin.de!uni-berlin.de!not-for-mail
From Christian Tanzer <tanzer@swing.co.at>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] Syntax-Erweiterung für Schleifen in Python3
Date Sat, 09 Apr 2016 10:54:51 -0000
Lines 71
Message-ID <mailman.113.1460200687.2253.python-de@python.org> (permalink)
References <5708ACF0.3030708@sschwarzer.net> <E1aoqXT-0003qn-L8@swing.co.at>
Reply-To Christian Tanzer <tanzer@swing.co.at>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
X-Trace news.uni-berlin.de VKTz359DKbJntfS+RFoY1g0AJXQCpKl+Q3FXwOewVG3w==
Return-Path <tanzer@swing.co.at>
X-Original-To python-de@python.org
Delivered-To python-de@mail.python.org
X-Mailer PMA 0.8.0
In-reply-to Your message of "Sat, 9 Apr 2016 09:19:12 +0200" <5708ACF0.3030708@sschwarzer.net>
X-Spambayes-Classification ham; 0.00
Resent-From Christian Tanzer <tanzer@swing.co.at>
Resent-To python-de@python.org
Resent-Content-Type text/plain; charset=utf-8
Resent-date Sat, 09 Apr 2016 10:56:04 -0000
Resent-message-id <146019936455.14903.10247271703753298197@tr.swing.cluster>
X-BeenThere python-de@python.org
X-Mailman-Version 2.1.21
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 <E1aoqXT-0003qn-L8@swing.co.at>
X-Mailman-Original-References <5708ACF0.3030708@sschwarzer.net>
X-Original-Content-Transfer-Encoding 8bit
Xref csiph.com de.comp.lang.python:4387

Show key headers only | View raw


Stefan Schwarzer wrote at Sat, 9 Apr 2016 09:19:12 +0200:

> > - Bevor man über Syntax-Erweiterungen nachdenkt, sollte man
> >   meines Erachtens erst mal schauen, ob man nicht eine
> >   Möglichkeit findet, diese Schleifen-Sonderfälle mit einer
> >   jetzt schon funktionierenden Python-API zu behandeln. Es
> >   kann natürlich sein, dass das schwerfällig wird, aber ich
> >   finde es besser, das auszuprobieren als es nur zu
> >   vermuten. :-)
>
> Ich habe darüber nachgedacht, aber mir ist kein besserer
> Ansatz eingefallen wie in den schon geschriebenen Antworten.
>
> Ein Kontextmanager fällt aus, da bei einem `with`-Statement
> der Block nur einmal durchlaufen werden kann.
>
> Den Schleifenrumpf zu einer Funktion zu machen und in eine
> Higher-Order-Function hineinzureichen wird deutlich
> komplizierter als der schon beschriebene Ansatz mit Flag
> oder Sentinel.
>
> Fällt euch noch etwas ein?

Sicher. Generator-Funktionen sind das Mittel der Wahl, um sowas zu
abstrahieren.

Beispielsweise ::

    def iter_with_setup(iterable, setup_fct):
        it = iter(iterable)
        first = next(it)
        setup_fct(first)
        yield first
        for item in it:
            yield item

In Python 3.3+ kann man die Schleife durch ein

    yield from it

ersetzen::

    Python 3.5.1 (default, Dec 30 2015, 11:41:55)
    [GCC 4.9.3] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> def iter_with_setup(iterable, setup_fct):
    ...     it = iter(iterable)
    ...     first = next(it)
    ...     setup_fct(first)
    ...     yield first
    ...     yield from it
    ...
    >>> def setup_example(x) :
    ...     print("setup_example called:", x)
    ...
    >>> for x in iter_with_setup(range(3), setup_example):
    ...     print(x)
    ...
    setup_example called: 0
    0
    1
    2
    >>> for x in iter_with_setup(range(0), setup_example):
    ...     print(x)
    ...
    >>>

Viele Grüsse,

--
Christian Tanzer                                    http://www.c-tanzer.at/

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


Thread

Re: [Python-de]  Syntax-Erweiterung für Schleifen in Python3 Christian Tanzer <tanzer@swing.co.at> - 2016-04-09 10:54 +0000

csiph-web