Каковы истинные и ложные критерии для объекта Python?

Я видел следующие случаи:

>>> def func(a):
...     if a:
...         print("True")
...
>>> a = [1, 2, 3]
>>> func(a)
True
>>> a == True
False

Почему эта разница возникает?

2 ответа

Решение

Все объекты1 в Python имеют значение истинности:

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

  • None
  • False
  • ноль любого числового типа, например, 0, 0.0, 0j,
  • любая пустая последовательность, например, '', (), [],
  • любое пустое отображение, например, {},

  • экземпляры пользовательских классов, если класс определяет __bool__() или же __len__() метод, когда этот метод возвращает целое число ноль или значение bool False,

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


1... если у них нет __bool__() метод, который вызывает исключение или возвращает значение, отличное от True или же False, Первый - необычное, но иногда разумное поведение (например, см. Комментарий user2357112 ниже); последнее не так.

Когда вы печатаете if a:, это эквивалентно if bool(a):, Так что это не значит, что a is True, только это aпредставление в виде логического значения True,

Вообще говоря bool это подкласс int, где True == 1 а также False == 0,

Другие вопросы по тегам