Никак не могу найти информацию по каким правилам сравниваются (>, <) разные типы данных?
Почему сравнении при списка 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
Комментариев нет:
Отправить комментарий