[Python-de] Link zu python-ideas "Control Flow - Never Executed Loop Body"
Stefan Schwarzer
sschwarzer at sschwarzer.net
Sa Apr 9 03:33:43 EDT 2016
On 2016-04-07 15:52, Thomas Güttler wrote:
> Link zu python-ideas "Control Flow - Never Executed Loop Body"
>
> https://groups.google.com/d/msg/python-ideas/RPAaSTN0Avw/FUneVrpZIwAJ
Thomas, vielen Dank! :-)
Ich habe mir das mal durchgelesen. Als wichtige Erkenntnisse
bleiben:
- Es ist nicht _allgemein_ möglich, in ein Iterable
"hineinzusehen", um festzustellen, ob es leer ist. Dazu
muss man den Iterator nach dem ersten Wert fragen. Wenn
man das in einer Hilfs-Funktion "versteckt", kann das zu
unangenehmen Überraschungen führen.
- Der Ansatz mit Sentinel,
item = sentinel = object()
for item in iterable:
...
if item is sentinel:
...
wird mitunter als deutlich schwerer verständlich angesehen
als eine Variante mit explizitem Flag:
has_items = False
for item in iterable:
has_items = True
...
if has_items:
...
Mir ist zum Sentinel-Ansatz noch eine Variante eingefallen,
die den Code hoffentlich verständlicher macht. Genauso, wie
man ein Flag nicht `flag` nennt, sondern zum Beispiel
`is_valid` oder `has_items`, kann und sollte man auch einen
spezielleren Namen als `sentinel` verwenden. Mein Vorschlag:
item = unset = object()
for item in iterable:
...
if item is unset:
...
Das ist meines Erachtens schöner "ausführbarer Pseudocode". :-)
Viele Grüße
Stefan
Mehr Informationen über die Mailingliste python-de