Следующий фрагмент аннотирован выводом ( как видно на ideone.com ):
print "100" < "2" # True
print "5" > "9" # False
print "100" < 2 # False
print 100 < "2" # True
print 5 > "9" # False
print "5" > 9 # True
print [] > float('inf') # True
print () > [] # True
Может кто-нибудь объяснить, почему вывод таков?
Детали реализации
- Это поведение предписано спецификацией языка или оно зависит от разработчиков?
- Есть ли различия между основными реализациями Python?
- Есть ли различия между версиями языка Python?
python
types
comparison
python-2.x
polygenelubricants
источник
источник
Ответы:
Из руководства по питону 2 :
Когда вы заказываете две строки или два числовых типа, упорядочение выполняется ожидаемым образом (лексикографическое упорядочение для строки, числовое упорядочение для целых чисел).
Когда вы заказываете числовой и нечисловой тип, числовой тип стоит первым.
Когда вы заказываете два несовместимых типа, где ни один из них не является числовым, они упорядочиваются в алфавитном порядке их типов:
Единственным исключением являются классы старого стиля, которые всегда предшествуют классам нового стиля.
Там нет спецификации языка . Справочник языка говорит:
Так что это деталь реализации.
Я не могу ответить на этот вопрос, потому что я использовал только официальную реализацию CPython, но есть и другие реализации Python, такие как PyPy.
В Python 3.x поведение было изменено, так что попытка упорядочить целое число и строку вызовет ошибку:
источник
complex(1,0) > 'abc'
это ,False
ноcomplex(1,0) > complex(0,0)
поднимаетTypeError
Строки имеют по сравнению лексически, и разнородные типы сравниваются по имени их типа (
"int"
<"string"
). 3.x исправляет вторую точку, делая их несопоставимыми.источник