2.2.3 Porównania

Operacje porównania mogą zostać wykonane na wszystkich obiektach. Wszystkie mają ten sam priorytet (który jest wyższy od priorytetu operacji logicznych). Porównania mogą być jawnie łączone, na przykład zapis x < y <= z jest równoznaczny z x < y and y <= z, za wyjątkiem tego, że wyrażenie y jest wyliczane tylko raz (ale w obu przypadkach z nie jest wyliczane w ogóle jeśli x < y okaże się fałszem).  

Operacje porównania:

Operacja  Znaczenie  Uwagi 
< mniejsze  
<= mniejsze lub równe  
> większe  
>= większe lub równe  
== równe  
!= różne (1)
<> różne (1)
is identyfikacja obiektu  
is not zanegowana identyfikacja obiektu  
  

Uwagi:

(1)
<> i != stanowią alternatywny zapis tego samego operatora. != jest preferowaną formą; <> jest formą zanikającą.

Obiekty różnych typów, za wyjątkiem typów liczbowych, nigdy nie dają wartości "prawda" w wyniku porównania. Takie porównania są rozstrzygane w sposób umowny, lecz jednoznaczny, (w ten sposób, że sortowanie tablicy zawierającej różne obiekty daje jednoznaczny wynik). Ponadto niektóre typy (na przykład obiekty plikowe) obsługują tylko zdegenerowaną formę porównań, to znaczy porównanie jakichkolwiek dwóch obiektów zawsze daje wynik "fałsz". Takie obiekty również są sortowane w sposób umowny ale jednoznaczny.

W przypadku, gdy którykolwiek z operandów jest liczbą zespoloną, operacje <, <=, > oraz >= spowodują wywołanie wyjątku TypeError.

 

Instancje klasy są zwykle porównywane jako nierówne, o ile klasa nie definiuje metody  __cmp__(). Informacje o wykorzystaniu tych metod znajdują się w opisie języka.

Uwaga implementacyjna: obiekty różnych typów za wyjątkiem liczb są sortowane według nazw ich typów. Obiekty tego samego typu, które nie obsługują właściwych metod porównawczych, są sortowane według ich adresu.

Istnieją dwa dodatkowe operatory z tym samym priorytetem: "in" oraz "not in" , które są obsługiwane wyłącznie przez typy sekwencyjne (patrz dalej).

Zajrzyj do Informacji na temat tej publikacji... aby pomóc w jej rozwoju.