Alle Diskussion geht um Python 3.1.2; für die Quelle meiner Frage siehe Python docs.Verständnis Zip-Funktion
Ich weiß, was zip
tut; Ich verstehe einfach nicht, warum kann es wie folgt umgesetzt werden:
def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
iterables = map(iter, iterables)
while iterables:
yield tuple(map(next, iterables))
Sagen wir, ich zip(c1, c2, c3)
nennen. Wenn ich richtig verstehe, ist iterables zunächst das Tupel (c1, c2, c3).
Die Zeile iterables = map(iter, iterables)
konvertiert es in einen Iterator, der iter (c1), iter (c2), iter (c3) zurückgibt, wenn iteriert wird.
Innerhalb der Schleife map(next, iterables)
ist ein Iterator, der durch next(iter(c1))
, next(iter(c2))
und next(iter(c3))
wenn iteriert zurückkehren würde. Der tuple
Anruf konvertiert es zu (next(iter(c1)), next(iter(c2)), next(iter(c3))
, sein Argument (iterables
) beim ersten Anruf erschöpfend, soweit ich sagen kann. Ich verstehe nicht, wie die while
Schleife weitergeht, da sie iterables
überprüft; und wenn es weitergeht, warum der Aufruf tuple
kein leeres Tupel zurückgibt (der Iterator ist erschöpft).
Ich bin sicher, ich bin etwas fehlt ganz einfach ..
Seltsam, es endlos Schleifen für mich, auch wenn es ganz gut aussieht ... und mein eigener Versuch funktioniert auch nicht o.O Ich bin schockiert. – delnan
Ich denke, das ist nur Pseudocode und sollte nicht wörtlich genommen werden. –
@Radomir Doporalski Es ist Python-Code, nicht Pseudocode, direkt aus der Dokumentation kopiert. Ich wäre sehr traurig, wenn ich mich nicht darauf verlassen könnte, und stattdessen musste ich mir überlegen, was die Funktion wirklich macht. Ich beziehe mich immer dann auf den Code, wenn ich mir bezüglich der Semantik der Funktion nicht 100% ig sicher bin. – max