Сравнение Нет со встроенными типами с использованием арифметических операторов?
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> None > 0 False >>> None == 0 False >>> None < 0 True
- Является ли сравнение
None
использующим арифметические операторы, хорошо определенные для встроенных типов (целые числа в этом случае)? - Является ли разница между первой и третьей сравнительной частью спецификации языка (спецификация Python – вы должны шутить :)) или это детализация реализации CPython?
- Сравните список входных данных пользователей с установленным списком с дубликатами
- Каковы основные различия в объектных моделях динамических языков, таких как Smalltalk, Ruby и Python
- Сравните две строки, включая повторяющиеся буквы?
- Python: сравнение двух файлов CSV и поиск похожих элементов
- Целочисленный диапазон числа сравнения в Python
Единственное значащее сравнение, которое вы действительно можете использовать с None
это if obj is None:
(или if obj is not None:
.
Сравнение между различными типами было удалено из Python 3 по уважительным причинам – они были общим источником ошибок и приводили к путанице. Например
>>> "3" < 4 False
В Python 3 вы получаете TypeError
при сравнении значений разных типов, таких как str
vs. int
или ничего против None
.
>>> None < 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: NoneType() < int()
(Я имею в виду «сравнение» в смысле попытки определить, какое из двух значений больше / меньше. Сравнение для равенства в порядке – оно всегда будет возвращать False
если два объекта имеют разные типы.)
Я не нашел ссылку в документах для этого, но в Learning Python, четвертое издание , Марк Лутц пишет на стр. 204:
[…] Сравнение различных типов типизированных объектов (например, строки и списка) – язык определяет фиксированный порядок между различными типами, который является детерминированным, если не эстетичным. То есть упорядочение основано на именах задействованных типов: все целые числа меньше всех строк, например, потому что
"int"
меньше, чем"str"
.
Некоторые интересные цитаты из http://bytes.com/topic/python/answers/801701-why-none-0-a
В раннем Python было принято решение о том, что сравнение любых двух объектов является законным и приведет к согласованному результату. Таким образом, объекты разных типов будут сравнивать в соответствии с порядком их типов (зависимый от реализации, неуказанный, но согласованный порядок), а объекты того же типа будут сравниваться в соответствии с правилами, которые имеют смысл для этого типа.
Другие реализации имеют право сравнивать целое число и None по-разному, но в конкретной реализации результат не изменится.
Python 3 создаст исключение при таких сравнениях.
а также
Проблема типична; Первоначально у Python был булев тип, а модификация привела к странной семантике. C имеет ту же проблему.
- Невозможно применить DjangoModelPermissions к представлению, которое не имеет свойства `.queryset` или переопределяет метод` .get_queryset () `
- pip: Не удалось найти активированный virtualenv (обязательно)
- Как сравнить словари внутри списков
- Оценка сходства двух списков со строками
- python, как найти, если словарь содержит данные из другого словаря
- Как скопировать данные в Python
- python: почему IDLE медленнее, чем терминал?
- Как инструмент тестирования графического интерфейса пользователя PyUseCase сравнивается с Dogtail?
- Можно ли использовать pandas.dataframe.isin () с числовым параметром допуска?
- Сравнить объекты из более чем 2 списков
- Python или Ruby для .NET-разработчика?