Ich teste die Tupelstruktur und fand es seltsam, wenn ich den ==
Operator wie folgt verwende:
>>> (1,) == 1,
Out: (False,)
Wenn ich diese beiden Ausdrücke einer Variablen zuordne, ist das Ergebnis wahr:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
Diese Frage unterscheidet sich aus meiner Sicht von der Python-Tupel-Regel für die nachfolgende Kommasyntax. Ich frage die Gruppe von Ausdrücken zwischen ==
Operator.
python
tuples
equals-operator
Pythoner
quelle
quelle
Antworten:
Andere Antworten haben Ihnen bereits gezeigt, dass das Verhalten auf der Priorität des Bedieners beruht, wie hier dokumentiert .
Ich werde Ihnen zeigen, wie Sie die Antwort selbst finden, wenn Sie das nächste Mal eine ähnliche Frage haben. Mit dem
ast
Modul können Sie dekonstruieren, wie der Ausdruck analysiert wird:Daraus können wir ersehen, dass der Code analysiert wird, wie Tim Peters erklärte :
quelle
dis
: In diesem Fall werden zweiLOAD_CONST
mit unterschiedlichen Werten ((1,)
und1
) und einemBUILD_TUPLE
Opp-Code angezeigt.Dies ist nur die Priorität des Operators. Du zuerst
Gruppen mögen so:
Erstellt also ein Tupel mit einem einzelnen Element aus dem Ergebnis des Vergleichs des Ein-Element-Tupels
1,
mit der Ganzzahl1
für Gleichheit. Sie sind nicht gleich, sodass Sie das 1-TupelFalse,
für ein Ergebnis erhalten.quelle
1+2, 2==3, 4*7
tat nicht Gruppe wie(1+2), (2==3), (4*7)
. In der Praxis werden 1-Tupel kaum verwendet (auch außerhalb von StackOverflow-Fragen ;-)).True
/ istFalse
. Jetzt, wo ich verstehe, was passiert, ist es völlig offensichtlich und vernünftig.Wenn Sie das tun
Es wird ein Tupel mit dem Ergebnis erstellt, dass das Tupel
(1,)
mit einer Ganzzahl verglichen und somit zurückgegeben wirdFalse
.Wenn Sie stattdessen Variablen zuweisen, sind die beiden Tupel gleich miteinander verglichen.
Du kannst es versuchen:
quelle