Что должно заменить сравнения с False в python?

У меня есть функция, которая возвращает False если что-то не найдено, и возвращает структуру данных с тем, что я ищу в противном случае. Когда я присваиваю значение, возвращаемое из этой функции, переменной my_var в for петля, я делаю if my_var == False: continue продолжать.

pychecker не нравится это и сообщает Comparisons with False are not necessary and may not work as expected,

Как Python способ сделать это?

5 ответов

Решение

В качестве возвращаемого значения, указывающего на отсутствие результата, None почти всегда лучше

  • Если вы должны использовать Falseиспользовать not my_var, Это предполагает не - False возвращаемые значения никогда не бывают ложными (bool() превращает его в False - это касается пустых строк, пустых коллекций и нескольких других вещей).

  • Если объекты могут быть ложными, но должны отличаться от False, тогда сравнение необходимо, и вам придется игнорировать ошибку (незначительное изменение, my_var is False было бы немного более идиоматичным, но это практически то же самое). Но это не очень хорошая ситуация, и вы должны избегать этого для подделки ясности.

Повторюсь: если возможно, используйте None и тест для my_var is None,

Обычно вы бы вернулись None вместо False т.е. если объект не совпадает. А потом проверь if my_var == None: это все not 0, not False а также not None вернуть True,

Если вы просто хотите проверить ложное значение:

myval = findit('something')
if not myval:
   "not found"

Вы не хотите делать это, если вы действительно могли бы вернуть значение для случая "найден", которое имеет ложное значение. Например, если [] (пустой список) найден, это все равно будет сообщать "не найдено".

Если вы заботитесь, что это на самом деле Falseиспользовать is, True, False, а также None являются синглетонами, поэтому используется оператор сравнения тождеств.

if myval is False:
   "not found"

В этом случае вы используете False в качестве часового значения, чтобы указать, что нет результата.

Обычно None используется в качестве дозорного "без значения", поэтому я предлагаю вам изменить сигнатуру вашей функции для возврата None если значение не найдено. Это лучше согласуется с идиомой Python и поведением таких методов, как {}.get('missing-key'),

myval = findit('something')
if myval is None:
    "not found"

В случаях, когда никакое значение дозорного невозможно, потому что любое значение может быть возвращено (даже None или же False), Python использует исключение, чтобы указать, что значение не найдено. Например {}['missing-key'] поднимет KeyError,

Обычно вы просто используете not:

if not my_var: continue

В этом отношении Python более строго типизирован, чем C++. Только подлинные логические значения могут быть Истинными или Ложными.

Так my_var должен быть логическим. Поэтому вы просто проверяете это как единое целое.

if not my_var:
     continue
Другие вопросы по тегам