Ich habe kürzlich einen Tippfehler in meinem Programm entdeckt.
%Vor% Ich spielte damit herum und entdeckte das 5 < ["apple"] == True
und 5 > ["apple"] == False
Warum erlaubt Python diese Art von Vergleichen? Was wird unter der Haube ausgewertet, um festzustellen, dass 5
kleiner ist als ["apple"]
?
Ich denke, dass die Typen in diesem Fall verglichen werden, also ist es wie schreiben:
%Vor%und da "int" und "list" lexikographisch verglichen werden ("i" & lt; ""), erhalten Sie diese Ausgabe.
Wenn Sie versuchen:
%Vor%Sie erhalten False, da "string" & gt; "Liste".
CPython-Implementierungsdetail: Objekte verschiedener Typen außer Zahlen sind nach ihren Typnamen geordnet ; Objekte desselben Typs, die keinen korrekten Vergleich unterstützen, werden nach ihrer Adresse sortiert.
Es stammt aus der Dokumentation von Python 2:
Die Operatoren
<
,>
,==
,>=
,<=
und!=
vergleichen die Werte zweier Objekte. Die Objekte müssen nicht den gleichen Typ haben. Wenn beide Zahlen sind, werden sie in einen gemeinsamen Typ konvertiert. Andernfalls vergleichen Objekte unterschiedlicher Typen immer ungleich und werden konsistent, aber willkürlich geordnet. Sie können das Vergleichsverhalten von Objekten nicht integrierter Typen steuern, indem Sie eine__cmp__
-Methode oder umfangreiche Vergleichsmethoden wie__gt__
definieren.
Tags und Links python python-2.7