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


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

Re: [Python-de] Schleifen die ohne Durchlaufen des Schleifenkörpers beendet wurden

From Mike Müller <mmueller@python-academy.de>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] Schleifen die ohne Durchlaufen des Schleifenkörpers beendet wurden
Date 2016-03-25 12:49 +0100
Organization Python Academy GmbH & Co. KG
Message-ID <mailman.1.1458907747.28225.python-de@python.org> (permalink)
References (1 earlier) <CAMSP2L7OBP5h4yjrRrx4XuvwE3UMTg=grZqPzJ7B9ZEyYYXD5A@mail.gmail.com> <E7199327-B882-4691-A703-351C20DFE173@web.de> <A201B172-63F7-484B-80FB-EB92999275A7@darwin.in-berlin.de> <533CBF60-D919-4211-8155-ACC90B848839@web.de> <56F47AD1.5040008@chrisarndt.de>

Show all headers | View raw


[Multipart message — attachments visible in raw view] - view raw

Am 25.03.16 um 00:40 schrieb Christopher Arndt:
> Am 24.03.2016 um 23:46 schrieb Diez B. Roggisch:
>> Huh, im Zeitalter von ternary if’s noch den OR-Trick ;)
> 
> Der "OR-Trick" ist auch in Zeiten von "expr if expr else expr" noch des
> öfteren hilfreich weil oft kürzer. Er ist ja eigentlich nur eine andere
> Form von "expr1 if expr1 else expr2" (wobei expr1 nur einmal evaluiert
> wird).
> 
> Was man nicht mehr verwenden sollte, ist "expr and non-false-expr or expr".
> 
>> Ich denke wenn wuerde ich das eher kapseln in ein
>>
>> def loop_or_else(iterable, sideeffect):
>>      looped = False
>>      for item in iterable:
>>           looped = True
>>           yield item
>>      if not looped:
>>           sideeffect()
> 
> Wenn man weiß, dass ein bestimmter Wert niemals ein Element des
> Iterables sein wird, kann man das auch so verkürzen:
> 
> i = SENTINEL
> for i in collection:
>     do_item(i)
> if i == SENTINEL:
>     and_now_for_something_completely_different()
> 
> Ist immerhin nur eine Zeile mehr als die usprl. geforderte Lösung.

Ich würde das so machen:

senti = senti_start = object()
for i in collection:
    senti = do_item()
if senti is senti_start:
    empty()


object() ist der Sentinel schlechthin.
Alle Funktionen haben immer einen Rückgabewert. Damit muss ich `i`
nicht zwingend als Argument mitgeben.

Viele Grüße
Mike



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


Thread

Re: [Python-de]  Schleifen die ohne Durchlaufen des Schleifenkörpers beendet wurden Mike Müller <mmueller@python-academy.de> - 2016-03-25 12:49 +0100

csiph-web