The bool([x]) built-in function converts a value to a boolean (either True or False) using Python's standard truth testing procedure.
Truth Value Testing & Subclassing: In Python, bool is a subclass of int, meaning True == 1 and False == 0 in mathematical operations. An object is considered truthy unless its class defines a __bool__() method that returns False or a __len__() method that returns 0. To evaluate logical collections, see any() and all(), or filter elements with filter(None, iterable).
The bool() constructor accepts zero or one argument:
# Formal syntax of built-in bool()
boolean_value = bool([x])
| Parameter | Type Accepted | Behavioral Details |
|---|---|---|
x |
Any object (optional) | The object whose truth value is evaluated. If omitted, returns False. |
| Return Value | bool |
Returns either True or False. |
Standard numbers and collections evaluate according to their magnitude and occupancy:
# 1. Truthy and Falsy built-in types
print("bool(10): ", bool(10)) # True (non-zero int)
print("bool('12'):", bool('12')) # True (non-empty string)
print("bool(''): ", bool('')) # False (empty string)
print("bool(0): ", bool(0)) # False (zero numeric)
print("bool(1): ", bool(1)) # True (non-zero numeric)
# 2. Collections truthiness
print("bool([]): ", bool([])) # False (empty list)
print("bool(()): ", bool(())) # False (empty tuple)
print("bool({}): ", bool({})) # False (empty dict/set)
print("bool(None):", bool(None)) # False (singleton None)
Output:
bool(10): True
bool('12'): True
bool(''): False
bool(0): False
bool(1): True
bool([]): False
bool(()): False
bool({}): False
bool(None): False
Under Section 4.1 of the Python Standard Library, the following built-in objects are defined as falsy:
| Category | Falsy Expressions | Evaluation Reason |
|---|---|---|
| Constants | None, False |
Built-in false singletons |
| Zero Numerics | 0, 0.0, 0j, Decimal(0), Fraction(0, 1) |
Numeric value equals zero |
| Empty Sequences | "", (), [], range(0) |
Sequence length len() == 0 |
| Empty Mappings | {}, set(), frozenset() |
Collection length len() == 0 |
In Python, bool inherits directly from int. True behaves as 1 and False behaves as 0 in arithmetic:
# Booleans in Python are a subclass of int!
print("issubclass(bool, int):", issubclass(bool, int)) # True
print("isinstance(True, int):", isinstance(True, int)) # True
# Numeric equivalence: True == 1 and False == 0
print("True == 1: ", True == 1) # True
print("False == 0:", False == 0) # True
# Arithmetic with booleans
print("True + True + False:", True + True + False) # 2
print("True * 50: ", True * 50) # 50
Output:
issubclass(bool, int): True
isinstance(True, int): True
True == 1: True
False == 0: True
True + True + False: 2
True * 50: 50
Python checks __bool__() first. If __bool__() is undefined, it falls back to __len__():
# Custom classes implementing __bool__() and __len__()
class Account:
def __init__(self, balance: float):
self.balance = balance
def __bool__(self) -> bool:
# Truthy only if account has positive funded balance
return self.balance > 0
class CustomCart:
def __init__(self, items: list):
self.items = items
def __len__(self) -> int:
# If __bool__ is undefined, Python falls back to __len__() != 0
return len(self.items)
acc1 = Account(150.0)
acc2 = Account(0.0)
cart1 = CustomCart(["Laptop", "Mouse"])
cart2 = CustomCart([])
print("Account with 150.0:", bool(acc1)) # True
print("Account with 0.0: ", bool(acc2)) # False
print("Cart with items: ", bool(cart1)) # True
print("Cart empty: ", bool(cart2)) # False
Output:
Account with 150.0: True
Account with 0.0: False
Cart with items: True
Cart empty: False
Below are real-world recipes utilizing bool() for configuration parsing and condition counting:
# Recipe A: Configuration flag normalization from strings
def parse_config_flag(val: str) -> bool:
if isinstance(val, str):
return val.strip().lower() in {"true", "1", "yes", "on", "enable"}
return bool(val)
print("Parse 'TRUE': ", parse_config_flag("TRUE"))
print("Parse 'yes': ", parse_config_flag("yes"))
print("Parse '0': ", parse_config_flag("0"))
print("Parse 'false':", parse_config_flag("false"))
# Recipe B: Counting truthy occurrences using sum() and bool()
records = ["active", "", "pending", None, "active", ""]
valid_count = sum(bool(r) for r in records)
print("Total valid non-empty records:", valid_count)
Output:
Parse 'TRUE': True
Parse 'yes': True
Parse '0': False
Parse 'false': False
Total valid non-empty records: 3
bool("False") and bool("0") evaluate to True because any non-empty string is truthy. Parse string flags with membership sets instead.__bool__() to return an integer or string raises TypeError: __bool__ should return bool.if statements, writing if bool(my_list): is redundant; simply write if my_list:.# Pitfall 1: String "False" and "0" are TRUTHY!
# Any non-empty string in Python evaluates to True
print("bool('False'):", bool("False")) # True!
print("bool('0'): ", bool("0")) # True!
# Pitfall 2: Overriding __bool__ to return a non-boolean raises TypeError
class BadClass:
def __bool__(self):
return "yes" # Must return bool, not str!
try:
bool(BadClass())
except TypeError as err:
print("TypeError caught:", err)
Output:
bool('False'): True
bool('0'): True
TypeError caught: __bool__ should return bool, returned str
Practice truth value testing, custom __bool__ classes, and config parsing in our companion Jupyter Notebook:
Explore interactive code cells, implement custom __bool__ and __len__ logic, build resilient configuration parsers, and run self-validating assertions.
View on GitHub Run in Google ColabRun these unit checks directly in Python or your local environment to verify bool() mechanics:
def test_bool_mechanics():
# 1. Zero-argument invocation returns False
assert bool() is False
# 2. Standard truthiness
assert bool(42) is True
assert bool(0) is False
assert bool("hello") is True
assert bool("") is False
assert bool(None) is False
# 3. Numeric subclass inheritance
assert isinstance(True, int)
assert True + True == 2
# 4. Custom __bool__ protocol
class Toggle:
def __init__(self, state):
self.state = state
def __bool__(self):
return self.state
assert bool(Toggle(True)) is True
assert bool(Toggle(False)) is False
print("All bool() unit assertions passed! 100% verified.")
test_bool_mechanics()
Output:
All bool() unit assertions passed! 100% verified.
Converts numeric values or strings into integer numbers.
Converts numbers or strings into floating-point numbers.
Returns True if at least one item in an iterable evaluates to True.
Returns True if every item in an iterable evaluates to True.
Author & Instructor at plus2net
I write and maintain practical tutorials on Python, PHP, SQL, JavaScript, HTML, jQuery, and web development at plus2net. The tutorials focus on clear explanations, working examples, and code that readers can test and adapt while learning.