Ответ 1
При сравнении разных типов CPython 2 применяет несколько разных правил:
-
None
сначала сортируется. - Числа встречаются перед другими типами и сравниваются численно между собой.
- Другие типы упорядочены по их имени типа, если они явно не реализуют методы сравнения.
Кроме того, некоторые типы реализуют пользовательские правила сортировки и могут отказаться от всех попыток сортировки. Сложные числа вызывают исключение, когда вы пытаетесь их упорядочить, например, и datetime
объекты делают это при попытке упорядочить их относительно других типов.
Это не описано в справочной документации Python; см. сравнительный код по умолчанию в object.c
. Это деталь реализации, а не то, на что должен опираться ваш код. Документация документации операторов сравнения сообщает:
Большинство других объектов встроенных типов сравниваются неравномерно, если они не являются одним и тем же объектом; выбор того, считается ли один объект меньшим или большим, чем другой, делается произвольно, но последовательно в пределах одного выполнения программы.
Цель заключалась в том, чтобы сделать сравнение между различными типами стабильными при сортировке последовательности смешанных объектов.
В Python 3 правила сравнения были ужесточены; вы можете сравнивать объекты, которые явно реализуют сравнения. После многолетнего опыта был сделан вывод о том, что допускание произвольных сравнений только приводило к большей путанице; сравнение строк с цифрами в них целыми числами всегда смущает новичков, например.
Вместо этого вместо этого будет генерироваться исключение.