Was passiert in diesem Code?

7
%Vor%

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?

    
Aerovistae 16.10.2013, 04:40
quelle

7 Antworten

8

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:

%Vor%

Teil ist nicht so offensichtlich.

    
Tim Peters 16.10.2013, 04:51
quelle
6

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

    
Bi Rico 16.10.2013 04:42
quelle
2

Es ist ziemlich geradlinig Code wirklich.

  1. Dies weist die drei Listen x , y und z zu.

    %Vor%
  2. Dies erzeugt ein Tupel von (x,y,z) und iteriert über jedes Element.

    %Vor%

    Jedoch bedeutet a,b,c , dass die Iterables 3 Objekte haben sollen

  3. Dann wird a , b und c gedruckt.

    %Vor%

Wenn Sie sehen wollen, was passiert, würde ich vorschlagen, eines der Elemente in y zu ändern:

%Vor%

Oder indem Sie eine aus x entfernen:

%Vor%     
user764357 16.10.2013 04:44
quelle
2
%Vor%

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

%Vor%     
inspectorG4dget 16.10.2013 04:45
quelle
2

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.

    
neves 16.10.2013 04:45
quelle
1

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:

%Vor%

Und die for-Schleife ist die gleiche wie:

%Vor%     
Chad Miller 16.10.2013 04:45
quelle
0

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

    
Dennis Flagg 16.10.2013 04:44
quelle

Tags und Links