Каковы истинные и ложные критерии для объекта 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__()
метод, когда этот метод возвращает целое число ноль или значение boolFalse
,Все остальные значения считаются истинными, поэтому объекты многих типов всегда являются истинными.
1... если у них нет __bool__()
метод, который вызывает исключение или возвращает значение, отличное от True
или же False
, Первый - необычное, но иногда разумное поведение (например, см. Комментарий user2357112 ниже); последнее не так.
Когда вы печатаете if a:
, это эквивалентно if bool(a):
, Так что это не значит, что a is True
, только это a
представление в виде логического значения True
,
Вообще говоря bool
это подкласс int
, где True == 1
а также False == 0
,