[Python-de] Erweiterte "For"-Schleife

André Malo ndparker at gmail.com
Mi Mai 16 21:46:46 CEST 2012


* Olе Streicher wrote:

> Das ist schon klar. Mein Problem ist aber Minidom:
> 
> for c in f.childNodes if c.localName == 'header':
>     for p in c.childNodes if p.localName == 'property':
>         print('%s = %s' % (p.getAttribute('name'),
>         p.getAttribute('value')))
> 
> was in dieser Form leichtverständlich ist, aber ohne den syntaktischen
> Zucker eben deutlich schwerer nachvollziehbar.

ich baue mir bei sowas gerne lokale Mini-Funktionen, die die Semantik besser
abbilden. Durch die Lokalität bleibt auch das Gesamtbild erhalten und der
globale Namensraum wird nicht gestört.

def children(node, which):
    # Einzeiler:
    return (child for child in node.childNodes if child.localName == which)

    # ODER

    # ich neige allerdings zu for-schleifen mir yield.
    # vertikal ist netter:
    for child in node.childNodes:
        if child.localName == which:
            yield child

for header in children(f, 'header'):
    for prop in children(header, 'property'):
        # dosomething

nd
-- 
die (eval q-qq[Just Another Perl Hacker
]
;-)
# André Malo, <http://www.perlig.de/> #


Mehr Informationen über die Mailingliste python-de