['f', 't'][bool('spam')]
this gives result ,
't'
But I cannot understand how this sample of code works?
CodePudding user response:
Any non-empty string is evaluated to True
in a boolean context, so we have
['f', 't'][True]
The bool
type is a subtype of int
, with True
and False
basically being 1
and 0
respectively, so we end up with
['f', 't'][1]
Which should make it clear why the output is 't'
.
Similarly,
['f', 't'][bool('spam')]
will output 'f'
.
CodePudding user response:
If you try to convert a bool
to int
, you will find that False
is 0 and True
is 1
print(int(False)) # 0
print(int(True)) # 1
print(['f', 't'][1]) # "t"
Let's look at the implementation of bool
class bool(int):
"""
bool(x) -> bool
Returns True when the argument x is true, False otherwise.
The builtins True and False are the only two instances of the class bool.
The class bool is a subclass of the class int, and cannot be subclassed.
"""