5 ответов:
Да онможет дать разные ответы.
x == NoneВызовет
__eq__()метод для оценки оператора и получения результата реализован по сравнению сNoneсинглетоном.not xВызовет
__nonzero__()(__bool__()в python3) метод для вычисления оператора. Интерпретатор преобразуетxв булеву (bool(x)), используя указанный метод, а затем инвертирует его возвращаемое значение из-заnotоператор .x is NoneОзначает, что ссылка x указывает на объект
None, который является синглетом типаNoneTypeи будет иметь значение false в сравнении. Тот самыйisоператор проверяет идентичность объекта, и таким образом, являются ли два сравниваемых объекта одним и тем жеэкземпляром объекта, а не подобными объектами.
class A(): def __eq__(self, other): #other receives the value None print 'inside eq' return True def __nonzero__(self): print 'inside nonzero' return True ... >>> x = A() >>> x == None #calls __eq__ inside eq True >>> not x #calls __nonzero__ inside nonzero False
not xявляется эквивалентным к:not bool(x)Py 3.x:
>>> class A(object): def __eq__(self, other): #other receives the value None print ('inside eq') return True def __bool__(self): print ('inside bool') return True ... >>> x = A() >>> x == None #calls __eq__ inside eq True >>> not x #calls __bool__ inside bool False
Да;
notиспользование__bool__(в Python 3; Python 2 использует__nonzero__), иx == Noneможет быть переопределен__eq__.
Если
xявляется положительным, тоnotозначает отрицательным и наоборот.
x == Noneозначает, что он будет толькоTrue, еслиx is NoneявляетсяTrueЕще ложным. Проверьте это .Под положительным я подразумеваю, что выбран блок
if.Trueтакже положительно.
not xсправедливо для широкого спектра значений, например:0, Нет, "", Ложь, [], {}, и т.д.
x == Noneверно только для одного конкретного значения None .Если x является экземпляром класса, то и
not x, иx == Noneбудут ложными, но это не означает, что они эквивалентны выражениям.
Прекрасно; этот предыдущий абзац должен гласить:
Если x является экземпляром класса, то оба
not xиx == Noneбудут ложными, если только кто-то не играет в дурацкие игры с определением класса.
Comments