Warum erlaubt Python 2 Vergleiche zwischen Listen und Zahlen? [Duplikat]

9

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"] ?

    
Trajanson 03.12.2016, 08:40
quelle

3 Antworten

4

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

Dokumentation :

  

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.

    
Maroun 03.12.2016 08:48
quelle
3

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.

    
salman wahed 03.12.2016 08:55
quelle
-3

Laut dies müssen verschiedene Typen einfach ungleich vergleichen, es hängt von der Implementierung ab um zu entscheiden, wie man damit umgeht. Es ist einfach so, dass die CPython-Implementierung entscheidet, basierend auf Typnamen zu sortieren.

    
yelsayed 03.12.2016 08:52
quelle

Tags und Links