Seite 1 von 1
for in erkläreung bitte!
Verfasst: Donnerstag 22. Januar 2009, 21:50
von snaik
Hi,
habe gerade(als C++ programmierer) die "for in"SChleife in Python gelernt.
also
geht durch alle elementen in array.
aber was macht das hier:
Code: Alles auswählen
self.editLink= [link for link in etree.parse(StringIO.StringIO(inhalt)).xpath("/a:entry/a:link[@rel='edit']/@href", namespaces=NAMESPACES)]
mich irritiert das link unmittelbar vor dem "for".
also da wird ansonsten aus einem XML file ein link eintrag geholt.(die varable heisst dummerweise auch link.)
Das Beispiel habe ich aus einem tutorial für die Google API
danke für Antworten!
Verfasst: Donnerstag 22. Januar 2009, 21:54
von cofi
Der Ausdruck ist eine List comprehension, was eine leichte Möglichkeit ist Listen zu erstellen.
In deinem Beispiel wird eine Liste mit allen Nodes(wenn ich das richtig seh) erstellt, die dem XPath-Pattern entsprechen. Ohne List comprehension:
Code: Alles auswählen
self.edit_link = []
for link in etree.parse(StringIO.StringIO(inhalt)).xpath("/a:entry/a:link[@rel='edit']/@href", namespaces=NAMESPACES):
self.edit_link.append(link)
http://www.python.org/dev/peps/pep-0202/
http://en.wikipedia.org/wiki/List_comprehension
Verfasst: Donnerstag 22. Januar 2009, 22:14
von snaik
oh.. ist das also so eine Art array das mit den ergebnissen gefüllt wird?
Also kann man die Variable nochmals vor der Schleife plazieren:
und damit ein array zu füllen.
Python ist sehr gewöhnungsbedürftig für mich
aber interessant.
danke!
Verfasst: Donnerstag 22. Januar 2009, 22:20
von Nocta
snaik hat geschrieben:oh.. ist das also so eine Art array das mit den ergebnissen gefüllt wird?
Man könnte das "Art Array" auch durch "Liste" ersetzen, so heißt der Datentyp nämlich
snaik hat geschrieben:Also kann man die Variable nochmals vor der Schleife plazieren:
und damit ein array zu füllen.
Python ist sehr gewöhnungsbedürftig für mich
aber interessant.
1. Lies dir am besten mal in der Dokumentation durch, was List Comprehensions sind. Im Prinzip hast du zwar recht, aber irgendwo auch doch nicht :p
2. Dürfte das Gewöhnen gar nicht mal so schwer fallen, ist viel angenehmer als C++
Verfasst: Freitag 23. Januar 2009, 00:32
von snafu
Ich merk mir das so: Das was am Ende "appendet" werden soll, kommt an den Anfang. Alles, was danach kommt, ist eigentlich nur runterschreiben ohne Doppelpunkte und Einrückungen. Oft mache ich mir zuerst eine Variante mit Einrückungen, die ich dann später in List Comprehension umwandle.
Verfasst: Freitag 23. Januar 2009, 07:42
von bwbg
Man kann sogar bestimmen, welche Werte aus der Liste (hier: range) verwendet werden sollen, man kann mit diesen auch unmittelbar Berechnungen durchführen.
Code: Alles auswählen
>>> [n ** 2 for n in range(1, 11) if n % 2 == 0]
[4, 16, 36, 64, 100]
Grüße... Heiko