Является ли `if x:` полностью эквивалентным `if bool (x) True:`?

Для небольшой тестовой среды, которую мы пишем, я пытаюсь предоставить некоторые полезные функции.

Один из них должен быть эквивалентен if x: но если это полностью эквивалентно, if bool(x) is True: тогда я мог бы предоставить только одну функцию, чтобы проверить, является if x is True: и if x:

Является ли отрицание этого эквивалентом? if bool(x) is False: равно, if not x: 😕

3 Solutions collect form web for “Является ли `if x:` полностью эквивалентным `if bool (x) True:`?”

if x: полностью эквивалентно тестированию для значения логической истины, да.

Из документации if :

Он выбирает только один из наборов, оценивая выражения один за другим, пока не будет найдено истинное значение (см. Раздел Логические операции для определения true и false)

где раздел Boolean operations описывает, как определяется истина. Функция bool() следует тем же самым правилам:

Возвращает логическое значение, то есть одно из значений True или False. x преобразуется с использованием стандартной процедуры проверки истинности.

Документация стандартных типов содержит раздел « Проверка правды » :

Любой объект может быть проверен на значение истины, для использования в if или while или в качестве операнда логических операций ниже.

not просто инвертирует то же истинное значение; поэтому, если x считается истинным по вышеуказанным правилам, not x возвращает False и True противном случае.

Будьте осторожны: в Python 2 встроенные имена False и True можно замаскировать , установив глобальный:

 >>> True = False >>> True False 

и, таким образом, тесты идентичности могут быть обмануты повторным назначением. Python 3 создает ключевые слова False и True .

Функция полезности не должна использовать bool(x) is True или bool(x) is False . Все, что вам нужно, это bool(x) а not bool(x) , поскольку они уже создают объекты True и False . bool() и not может ничего не возвращать, использование is True или is False на них чрезвычайно избыточно.

И последнее, но не менее важное: постарайтесь не изобретать испытательное колесо. Стандартная библиотека Python поставляется с библиотекой unittest ; он имеет функции assertTrue и assertFalse , а реализация этих функций просто используется, if и if not .

Да. Они эквивалентны. Правила, используемые if такие же, как и те, которые используются bool . not просто инвертирует эти значения без изменения логики определения правдоподобия или ложности.

дополнительно к ответу @Martijn, если то, что вы строите, – это какой-то класс, вы можете определить, какое поведение вы хотите иметь в случае проверки истины, например « ìf x », определяя функцию __bool__ .

 >>> class A: pass >>> a=A() >>> if a: print("this instance class is truthish") this instance class is truthish >>> a is True False >>> bool(a) is True True >>> 

поведение по умолчанию для определяемого пользователем класса всегда должно быть истинным в тесте правды, чтобы изменить это, просто определите __bool__ ( __nonzero__ в python 2), чтобы он соответствовал семантике класса, например, например:

 >>> class Switch: def __init__(self, state="off"): self.state = state def __bool__(self): if self.state == "on": return True return False >>> x=Switch() >>> if x: print("this instance class is truthish") >>> x is True False >>> bool(x) is True False >>> x.state="on" >>> if x: print("this instance class is truthish") this instance class is truthish >>> x is True False >>> bool(x) is True True >>> 
  • Генератор Python - что не использовать его для
  • Каков метод выполнения nl2br в Генши?
  • Лучший способ вырезать все, кроме текста с веб-страницы?
  • python прерывает команду, если она занимает больше времени, чем
  • Файл os.path.isfile не работает должным образом
  • Невозможно выполнить замену
  • Запрос ElasticSearch с запросами Python не работает нормально
  • Объедините данные двух массивов, используя внутреннее соединение
  • Python - лучший язык программирования в мире.