Seite 1 von 1

Suche Erklaerung einer for- in loop Syntax

Verfasst: Dienstag 7. Oktober 2008, 16:52
von Flo668
Hi,

ich habe in einem Programm, das ich versuche zu debuggen folgende Konstruktion gefunden:

Code: Alles auswählen

 for k, (srcdn, files) in ki:
     afiles = [join(srcdn, x) for x in files]
(ki ist vom Typ Dictionary)

So etwas kenne ich aus C++ oder c# nicht und im Netz habe ich nichts gefunden.

Ich kenne wohl for i in range(0,n) aber das scheint was anderes zu sein. Um den Bug im Originalprogramm zu finden, muss und will ich aber möglichst genau wissen, wie denn die obige Sequenz zu interpretieren ist.

Vielen Dank!

Re: Suche Erklaerung einer for- in loop Syntax

Verfasst: Dienstag 7. Oktober 2008, 17:04
von sma
Flo668 hat geschrieben:... und im Netz habe ich nichts gefunden.
Solche Aussagen finde ich immer ein bisschen merkwürdig. Sollte es nicht selbstverständlich sein, sich mal die Dokumentation der Sprache, die man da verstehen will, anzuschauen? Im Tutorial werden recht weit am Anfang (seit Python 2.6 gibt es offenbar keine Kapitelnummern mehr) list comprehensions erklärt. Das Stichwort sollte dir weiterhelfen.

Stefan

Verfasst: Dienstag 7. Oktober 2008, 19:43
von Darii
Solltest du das andere meinen, das nennt sich sequence unpacking.

Verfasst: Dienstag 7. Oktober 2008, 23:39
von BlackJack
@Flo668: Entweder ist das nicht der originale Quelltext, oder `ki` ist kein Dictionary, oder das Dictionary hat recht ungewöhnliche Schlüssel.

Arbeite am besten mal das Tutorial aus der Dokumentation durch, da sollten die Bestandteile eigentlich alle abgedeckt werden.

Verfasst: Mittwoch 8. Oktober 2008, 09:50
von numerix
BlackJack hat geschrieben:@Flo668: Entweder ist das nicht der originale Quelltext, oder `ki` ist kein Dictionary, oder das Dictionary hat recht ungewöhnliche Schlüssel.
Das hat mich auch beschäftigt und ich dachte zunächst, ki könne überhaupt kein Dictionary sein. Stimmt aber nicht, KÖNNTE schon, aber der Schlüssel wäre in der Tat sehr ungewöhnlich:

Code: Alles auswählen

ki = {(1,(2,3)):'a', (4,(5,6)):'b', (7,(8,9)):'c'}
:roll:

Verfasst: Mittwoch 8. Oktober 2008, 10:44
von BlackJack
@numerix: Ein Blick in die nächste Zeile verrät, das `files` selbst wieder "iterable" ist, das erfüllt Dein Beispiel noch nicht.

Code: Alles auswählen

ki = {(1, (2, ('x', 'y'))): 'a', (4, (5, ('v', 'w'))): 'b', (7, (8, ('f', 'g'))): 'c'}
Ab hier wird's IMHO gruselig und ich hoffe inständig im Original steht so etwas wie ``ki.items()`` in der ``for``-Zeile. :-)

Verfasst: Mittwoch 8. Oktober 2008, 15:56
von numerix
BlackJack hat geschrieben:@numerix: Ein Blick in die nächste Zeile verrät, das `files` selbst wieder "iterable" ist, das erfüllt Dein Beispiel noch nicht.
Den Anspruch sollte das Beispiel auch nicht haben. Mir ging es zunächst nur um äußere Schleife.
Tatsächlich wird die Datenstruktur von ki noch abenteuerlicher, wenn man die LC mit einbezieht.