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?
You can check if a value is either truthy or falsy with the built-in bool() function. According to the Python Documentation, this function: Returns a Boolean value, i.e. one of True or False .
Python boolean data type has two values: True and False . Use the bool() function to test if a value is True or False . The falsy values evaluate to False while the truthy values evaluate to True . Falsy values are the number zero, an empty string, False, None, an empty list, an empty tuple, and an empty dictionary.
All Python objects can be used in expressions that should return a boolean value, like in an if or while statement. Python's built-in objects are usually Falsy (interpreted as False ) when they are “empty” or have “no value” and otherwise they are Truthy (interpreted as True ).
First, we look at what kind of values evaluate to "True" or "False" in python. Anything that is "empty" usually evaluates to False, along with the integer 0 and the boolean value of False. Objects that are not empty evaluate to "True", along with numbers not equal to 0, and the boolean value True.
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With