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
iforwhilecondition 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.
