I have seen the following cases:
>>> def func(a):
... if a:
... print("True")
...
>>> a = [1, 2, 3]
>>> func(a)
True
>>> a == True
False
Why does this difference occur?
I have seen the following cases:
>>> def func(a):
... if a:
... print("True")
...
>>> a = [1, 2, 3]
>>> func(a)
True
>>> a == True
False
Why does this difference occur?
All objects1 in Python have a truth value:
Any object can be tested for truth value, for use in an
if
orwhile
condition or as operand of the Boolean operations below. The following values are considered false:
None
False
zero of any numeric type, for example,
0
,0.0
,0j
.any empty sequence, for example,
''
,()
,[]
.any empty mapping, for example,
{}
.instances of user-defined classes, if the class defines a
__bool__()
or__len__()
method, when that method returns the integer zero or bool valueFalse
.All other values are considered true — so objects of many types are always true.
1 … unless they have a __bool__()
method which raises an exception, or returns a value other than True
or False
. The former is unusual, but sometimes reasonable behaviour (for example, see the comment by user2357112 below); the latter is not.
When you type if a:
, it is equivalent to if bool(a):
. So it doesn't mean that a is True
, only that a
's representation as a boolean value is True
.
Generally speaking bool
is a subclass of int
, where True == 1
and False == 0
.
© 2022 - 2024 — McMap. All rights reserved.