Die Ausgabe ist:
%Vor%Ich kann nicht mental navigieren, welche Logik auch immer hier vorgeht, um diese Ausgabe zu erzeugen. Ich bin mir der Zip-Funktion bewusst, damit sich dieser Code so verhält, wie ich es mir vorstelle. aber ich versuche nur zu verstehen, warum es so funktioniert, wenn Sie nicht die Zip-Funktion verwenden.
Ist dies eine bewusste Funktion, eine Funktion, mit der Sie auf diese Weise nacheinander mehrere Listen durchlaufen können? Irgendwie?
Sie haben bereits gute Antworten, aber ich denke, dass die Berücksichtigung dieser äquivalenten Variation helfen wird, es klarer zu machen:
%Vor% Sie sind nicht überrascht, dass t
sukzessive an x
, y
und z
gebunden ist, oder? Genau das gleiche passiert in Ihrem ursprünglichen Code, außer dass das:
Teil ist nicht so offensichtlich.
Oh Mann, das ist ein Durcheinander. Dies ist einfach zu viel Gebrauch von Pythons iterbarem Entpacken . Die Anweisung a, b, c = iterable
weist den Elementen iterable
, a
und b
einfach die Elemente von c
zu. In diesem Fall muss iterable
3 Elemente haben.
Zuerst haben Sie:
%Vor%dann hast du:
%Vor% Noch eine Anmerkung: Die Anweisung mytuple = 1, 2, 3
ist identisch mit mytuple = (1, 2, 3)
.
Es ist ziemlich geradlinig Code wirklich.
Dies weist die drei Listen x
, y
und z
zu.
Dies erzeugt ein Tupel von (x,y,z)
und iteriert über jedes Element.
Jedoch bedeutet a,b,c
, dass die Iterables 3 Objekte haben sollen
Dann wird a
, b
und c
gedruckt.
Wenn Sie sehen wollen, was passiert, würde ich vorschlagen, eines der Elemente in y
zu ändern:
Oder indem Sie eine aus x
entfernen:
ist dasselbe wie sagen
%Vor%Weiter
%Vor%entspricht
%Vor% sagt nur "nimm x
, y
und z
der Reihe nach. Ordne ihren Inhalt jeweils a
, b
und c
zu; dh a=x[0]
, b=x[1]
, c=x[2]
.
Letztendlich wird daraus
Es ist eine ungewöhnliche Python-Sache. Die implizite Erstellung von Tupel.
Hier erstellen Sie ein anonymes Tupel rechts
%Vor%Dies ist ein ähnlicher Code:
%Vor%das ist das gleiche:
%Vor%oder
%Vor%Erlaubt einen gewöhnlichen Python-Trick (Idiom). Sie können Werte ohne eine temporäre Variable austauschen:
%Vor%Das Gleiche passiert mit dem Schlüssel und den Werten eines Wörterbuchs:
%Vor%In Ihrem Code wird das andere temporäre Tupel in der for-Schleife erstellt:
%Vor%Das bedeutet:
%Vor%Mit anderen Worten: Schreiben Sie diesen Code für etwas besser lesbar. Python folgt nicht seinem eigenen Mantra: Explicit ist besser als implizit. .
Übrigens, siehe die spaßige Python-Zen-Eingabe import this
in einer Python-Shell.
Alles wird hier erklärt: Ссылка
Der erste Teil erkennt, dass Kommas Tupel implizit erzeugen. Die erste Zeile entspricht also:
%Vor%Dies bedeutet auch, dass Ihre for-Schleife äquivalent ist zu:
%Vor% Der zweite zu verstehende Teil ist das Sequenz-Entpacken. Dies bedeutet, dass wenn Sie eine Sequenz der Länge n
auf n
Variablen zuweisen, Python die Elemente in der Sequenz entsprechend zuordnet. Also der erste Teil ist effektiv:
Und die for-Schleife ist die gleiche wie:
%Vor%Es sieht so aus, als ob Sie 3 Arrays haben
%Vor%und a, b, c repräsentieren die Elemente in jedem Array. Es sieht also so aus, als ob die for-Schleife über 3 Arrays iteriert und die Elemente auf a, b und c abbildet. Dann drucken Sie sie aus. Dann wieder, ich weiß nicht, Python
Tags und Links python python-3.x