I've come across some code that reads:
if bool(x):
doSomething
I think that the following would do the same job:
if x:
doSomething
The reference says that it evaluates the suite if the test expression
is found to be true
The reference says of Boolean expressions:
In the context of Boolean operations, and also when expressions are used by control flow statements are used by control flow statements, the following values are interpreted as false: False, None, numeric zero of all types, and empty strings and containers ... All other values are interpreted as true.
The reference says of the bool()
function:
Convert a value to a Boolean, using the standard truth testing procedure
So are the two above identical or is there some extra subtlety to it?
if you use if x ,it means it has to evaluate x for its truth value. But when you use x ==True or x is True . It means checking whether type(x)==bool and whether x is True.
Python assigns boolean values to values of other types. For numerical types like integers and floating-points, zero values are false and non-zero values are true. For strings, empty strings are false and non-empty strings are true.
It simply inverts the value of the bool expression. True becomes False and False becomes True . if block will run only if expression inside the parentheses evaulates to True .
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).
Objects are implicitly converted to bool type when they are placed in an if statement. So, for most purposes, there's no difference between x
and bool(x)
in an if
statement. However, you will incur extra overhead if you call bool()
because you are making a function call. Here's a quick test to demonstrate this:
In [7]: %timeit if(''): pass
10000000 loops, best of 3: 21.5 ns per loop
In [8]: %timeit if(bool('')): pass
1000000 loops, best of 3: 235 ns per loop
if
will use __nonzero__()
if available, as does bool()
when testing a value for truth. So yes, the behaviour is equivalent.
From the documentation:
In the context of Boolean operations, and also when expressions are used by control flow statements, the following values are interpreted as false: False, None, numeric zero of all types, and empty strings and containers (including strings, tuples, lists, dictionaries, sets and frozensets). All other values are interpreted as true. (See the
__nonzero__()
special method for a way to change this.)
object.__nonzero__(self)
Called to implement truth value testing and the built-in operation
bool();
should return False or True, or their integer equivalents 0 or 1. When this method is not defined,__len__()
is called, if it is defined, and the object is considered true if its result is nonzero. If a class defines neither__len__()
nor__nonzero__()
, all its instances are considered true.
any Object that you put in an if
statement will be converted to a bool based on some internal python checker, normally not an issue, there is no difference between bool(x)
and (x)
when inside an if
statement.
however, the reason bool(x)
exists is for cases such as:
return bool(x)
which would return "true
or false
" based on the object.
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