Python сравнение с None
Primary tabs
Ответ:
Если любой объект не None сравнить (==) с объектом None, то результат будет False
НО: есть способ создать пользовательский объект, при сравнении которого с None мы получим True.
Обсуждение:
Сравнение с None -
например для string всегда ли возвращает True?
current_word = None if current_word == word: // ??
Судя по коду отсюда автор как раз рассчитывает на True. Но какие ещё бывают особенности?
- Log in to post comments
- 31265 reads
humanmashine
Thu, 02/06/2014 - 17:22
Permalink
Не понятна суть вопроса
Не понял вопрос. Но всёже постараюсь ответить....
Если любой объект не None сравнить с объектом None, то результат будет False. В приведённой ссылке автор никак не расчитывает на выполнение условия. Дело в том, что None - это как бы "ничего" а ничего иногда интерпретируется как False.
Автор примера для Hadoop нарушил дзен Питона и сделал неочевидный шаг. Чтобы не выводить первый раз строку "None 0" он вставил условие:
Условие не выполнится, так как current_word = None.
Более правильной (очевидной) проверкой условия является ли объект (скажем test) None выглядит, к примеру так:
vedro-compota
Fri, 02/07/2014 - 11:24
Permalink
ок. спасибо за это пояснение
ок. спасибо за это пояснение - оно ценно - я даже не обратил внимания на строку
теперь ясно что это условие "работает" только один раз.
Но мой вопрос был именно по сравнению методом "==" с None - и оно имеет место в первой итерации цикла в строке:
_____________
матфак вгу и остальная классика =)
humanmashine
Fri, 02/07/2014 - 12:45
Permalink
Не за что :)
Скорее "не сработает" только один раз. )))
---
Касательно сравнение оператором "==", как я уже говорил:
vedro-compota
Fri, 02/07/2014 - 15:14
Permalink
Если любой объект не None
ага....я не заметил строки:
которая выполнится в случае False и таким образом для первой итерации всё будет нормально.
Ещё помучаем знатока
Итак -
уточним как
и можно было бы вынести в топик (вверху) но вот проблема
утверждают, что:
то есть можно забомбить пользовательский класс, где
(отсюда: stackoverflow.com/questions/14247373/python-none-comparison-should-i-use-is-or)
Как быть и что происходит?
_____________
матфак вгу и остальная классика =)
humanmashine
Fri, 02/07/2014 - 15:27
Permalink
Правильно
Вы опять невнимательно посмотрели код. Дело в том, что и должно посчитаться один раз, если их всего два.
В коде выше, мы не только считываем слово, но и число, которое в примере равно 1. Значит по-умолчанию счётчик равен 1. Если слово встречается всего два раза, то мы должны потом накрутить счётчик всего один раз.
vedro-compota
Fri, 02/07/2014 - 16:00
Permalink
должно посчитаться один раз,
верно)
А что а насчёт возвращаемого True здесь:
Это из-за того что переопеределена функция сравнения. да?
_____________
матфак вгу и остальная классика =)
humanmashine
Fri, 02/07/2014 - 16:43
Permalink
По поводу определения
По поводу определения пользовательских классов.
Действительно, операцию сравнения "==" можно переопределить, тем самым добиться иного поведения. Но если вы хотите или кто-то другой чтобы ваш объект был как None, то может не надо этому противиться. ))))
Хотя, чтобы избежать этого с объектом None, как я говорил ранее, лучше использовать выражение is, которое ведёт себя в общем случае так: возвращает истинну в случае с x is y, если x тот же объект что и y. Пример:
Исходя из вышесказанного, если вам необходимо проверить что объект ТОЧНО не является объектом None, то используйте ранее описанный пример:
vedro-compota
Fri, 02/07/2014 - 16:35
Permalink
благодарю за качественный
благодарю за качественный ответ. )
_____________
матфак вгу и остальная классика =)
vedro-compota
Fri, 02/07/2014 - 17:09
Permalink
всякие другие вопросы
Прошу подсказать здесь: http://fkn.ktu10.com/?q=node/5836
И на досуге комментировать что-то наиболее важное из списка, который теперь видимо будет постоянно пополняться: http://fkn.ktu10.com/?q=node/5836
_____________
матфак вгу и остальная классика =)