Есть ли в Python оператор строгого сравнения наподобие ===?
Просто обычное сравнение через == работает не так как нужно:
>>> 0 == False
True
Ответы (5 шт):
Автор решения: DGDays
→ Ссылка
Что именно вас смущает? В Python True = 1, а False = 0. Если вам надо сравнить именно слова True и False, тогда просто возьмите их в качестве строк например 0 == "False"
Автор решения: MaxU
→ Ссылка
Если суть вопроса в сравнении значений и типов, то можно сделать так:
def strict_eq(obj1, obj2):
if type(obj1) != type(obj2):
return False
return obj1 == obj2
In [4]: strict_eq(0, False)
Out[4]: False
PS можно пойти ещё дальше и для числовых типов сравнивать числа до определенной точности, чтобы избежать известных проблем с плавающей точкой:
In [5]: 0.1 + 0.2 == 0.3
Out[5]: False
функция строгого сравнения с определенной точностью:
from numbers import Number
def strict_eq(obj1, obj2, epsilon=1e-7):
if type(obj1) != type(obj2):
return False
if isinstance(obj1, Number):
return abs(obj1 - obj2) < epsilon
return obj1 == obj2
In [10]: strict_eq(0.1 + 0.2, 0.3)
Out[10]: True
Автор решения: MarianD
→ Ссылка
Для многих случаев возможно применить сравнение idов:
id(0) == id(False)
False
Это не совсем соответствует оператору === (JavaScript), но может быть полезным.