Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does ... == True return False in Python 3?

I am learning python, but I'm a bit confused by the following result.

In [41]: 1 == True
Out[41]: True

In [42]: if(1):
    ...:     print('111')
    ...:     
111

In [43]: ... == True
Out[43]: False <===== why this is False while '1 == True' is True in previous sample

In [44]: if (...): <==== here ... just behaves like True
    ...:     print('...')
    ...:     
...

According to the documentation, ... has a truth value of True.

But I still feel the above code a bit inconsistent.

...And something more interesting:

In [48]: 2==True
Out[48]: False <===== why 1==True returns True while 2==True returns False?

In [49]: if(2):
    ...:     print('222')
    ...:     
222
like image 342
smwikipedia Avatar asked May 11 '17 14:05

smwikipedia


People also ask

Why does true == true return false?

Because they don't represent equally convertible types/values. The conversion used by == is much more complex than a simple toBoolean conversion used by if ('true') . So given this code true == 'true' , it finds this: "If Type(x) is Boolean , return the result of the comparison ToNumber(x) == y ."

What does == false mean in Python?

The False keyword is a Boolean value, and result of a comparison operation. The False keyword is the same as 0 ( True is the same as 1).

Does == mean true in Python?

The Python Boolean type is one of Python's built-in data types. It's used to represent the truth value of an expression. For example, the expression 1 <= 2 is True , while the expression 0 == 1 is False . Understanding how Python Boolean values behave is important to programming well in Python.

How to return true or false in Python?

If a is divisible by b, then a % b returns 0, which is falsy in Python. So, to return True, you need to use the not operator.

Why does Bool return false in Python?

It returns False if the parameter or value passed is False. Here are a few cases, in which Python’s bool () method returns false. Except these all other values return True. If a False value is passed. If None is passed. If an empty mapping is passed, such as {}.

What is an example of a function returning a false value?

For example, say you need to write a function that takes two integers, a and b, and returns True if a is divisible by b. Otherwise, the function should return False.

What is true and false in JavaScript?

All other values are considered true — so objects of many types are always true. Operations and built-in functions that have a Boolean result always return 0 or False for false and 1 or True for true, unless otherwise stated. (Important exception: the Boolean operations or and and always return one of their operands.)


2 Answers

Any object can be tested for "truthiness":

Any object can be tested for truth value, for use in an if or while 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 value False. [1]

All other values are considered true — so objects of many types are always true.

Operations and built-in functions that have a Boolean result always return 0 or False for false and 1 or True for true, unless otherwise stated. (Important exception: the Boolean operations or and and always return one of their operands.)

So it's not hard to see that if ... will enter the branch. The Ellipsis object is considered true. However that doesn't mean it has to be equal to True. Just the bool(...) == True!

The if will implicitly call bool on the condition, so:

if ...:
    # something

will be evaluated as if you had written:

if bool(...):
    # something

and:

>>> bool(...)
True
>>> bool(1)
True
>>> bool(2)
True

However there's one catch here. True is equal to 1 and False equal to 0, but that's just because bool subclasses integer in python.

like image 157
MSeifert Avatar answered Oct 25 '22 01:10

MSeifert


In python most (all?) objects have a bool value. The meaning behind "has a truth value of True" means that bool(obj) evaluates to True.

On the other hand, True is treated as 1 in many cases (and False as 0) which you can see when you do stuff like:

sum([True, True, False])
# (1 + 1 + 0) -> 2

That is why you get 1 == True --> True

There is a more explicit explanation in the documentation:

Boolean values are the two constant objects False and True. They are used to represent truth values (although other values can also be considered false or true). In numeric contexts (for example when used as the argument to an arithmetic operator), they behave like the integers 0 and 1, respectively

From the type-hierarchy itself in the docs:

These represent the truth values False and True. The two objects representing the values False and True are the only Boolean objects. The Boolean type is a subtype of the integer type, and Boolean values behave like the values 0 and 1, respectively, in almost all contexts, the exception being that when converted to a string, the strings "False" or "True" are returned, respectively.

like image 1
Reut Sharabani Avatar answered Oct 25 '22 00:10

Reut Sharabani