Страницы

Поиск по вопросам

пятница, 1 февраля 2019 г.

Сравнение данных разных типов в python2

Никак не могу найти информацию по каким правилам сравниваются (>, <) разные типы данных?
Почему сравнении при списка b = [10, 0], числа a = 5 и строки s = 'sad' получается
a > b # False s > b # True
Т.е.
5 > [10, 0] # False 'sad' > [10, 0] # True
Как сравниваются такие типы данных?


Ответ

https://stackoverflow.com/questions/3270680/how-does-python-compare-string-and-int
CPython implementation detail: Objects of different types except numbers are ordered by their type names; objects of the same types that don’t support proper comparison are ordered by their address.
Перевод: "Деталь реализации CPython: объекты разных типов, за исключением чисел, упорядочиваются согласно их именам типов, объекты одного типа, не поддерживающего операцию сравнения, упорядочиваются по адресу."
Ссылка на официальное руководство: https://docs.python.org/2/library/stdtypes.html#comparisons Цитата оттуда (перевод мой):
Объекты различных типов, кроме различных числовых типов и различных типов строк, никогда не равны; такие объекты упорядочиваются последовательно, но произвольно (так что сортировка неоднородного массива дает последовательный результат). Кроме того, некоторые типы (например, файловые объекты) поддерживают только вырожденное понятие сравнения, где любые два объекта этого типа не равны. Опять же, такие объекты упорядочены произвольно, но последовательно.Операторы <, <=,> И> = вызовут исключение TypeError, когда любой операнд является комплексным числом
В данной цитате слово "последовательно" - буквальный перевод слова "consistently", ИМХО, имеется в виду, что sort([1, "", []]) всегда даст один и тот же результат.

Например:
5 < [] # -> True, т.к. 'int' < 'list' [] < "" # -> True, т.к. 'list' < 'str

Комментариев нет:

Отправить комментарий