[Python-de] Erweiterte "For"-Schleife

Thomas Rachel nutznetz-0c1b6768-bfa9-48d5-a470-7603bd3aa915 at spamschutz.glglgl.de
Mi Mai 9 16:15:33 CEST 2012


> 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.

Hm. Vielleicht ja

def filterlocalname(node, name):
     for child in node.childNodes:
         if child.localName == name: yield child

oder einfach

filterlocalname = lambda node, name: (
     child for child in node.childNodes if child.localName == name
     )

und dann:

for c in filterlocalname(f, 'header'):
     for p in filterlocalname(c, 'property'):
         print('%s = %s' % (p.getAttribute('name'), 
p.getAttribute('value')))


Hab grade überlegt, ob sich nicht einfacher was mit 
getElementsbyTagName() oder so machen ließe, aber das berücksichtigt 
nicht die Beschränkung auf "header" auf der 1. Ebene...


Thomas


Mehr Informationen über die Mailingliste python-de