ZetCode

Python bool Function

Last modified April 11, 2025

This comprehensive guide explores Python's bool function, which returns the truth value of an object. We'll cover truthy/falsy values, custom objects, and practical examples of boolean conversion.

Basic Definitions

The bool function returns True or False based on the truth value of the argument. It follows Python's truth value testing rules.

Key characteristics: works with any Python object, follows standard truth testing rules, and is the constructor for the bool type.

Basic Usage with Standard Types

Here's simple usage with different Python types showing how bool evaluates common values.

basic_bool.py
# With numbers
print(bool(0))      # False
print(bool(42))     # True
print(bool(0.0))    # False
print(bool(3.14))   # True

# With sequences
print(bool(""))     # False
print(bool("hi"))   # True
print(bool([]))     # False
print(bool([1,2]))  # True

This example shows bool with different standard types. Numeric zero and empty sequences are falsy. All other values are truthy.

The function follows Python's standard truth testing rules, which are consistent across the language (in if statements, while loops, etc.).

Custom Objects with __bool__

You can make custom objects work with bool by implementing the __bool__ special method. This example creates a Box class.

custom_bool.py
class Box:
    def __init__(self, items):
        self.items = items
    
    def __bool__(self):
        return len(self.items) > 0
    
    def __repr__(self):
        return f"Box({self.items})"

empty_box = Box([])
full_box = Box(["apple", "banana"])

print(bool(empty_box))  # False
print(bool(full_box))   # True

The Box class implements __bool__ to return True when it contains items. When we call bool on a Box instance, Python uses this.

This pattern is useful for creating objects that need to participate in truth testing, like containers or wrappers.

Truthy and Falsy Values

This example demonstrates Python's falsy values and how bool handles them consistently.

falsy_values.py
falsy_values = [
    None, False, 0, 0.0, 0j, "", (), [], {}, set(), range(0)
]

for value in falsy_values:
    print(f"{repr(value)}: {bool(value)}")

# All print False

These are all built-in falsy values in Python. The bool function returns False for each of these standard cases.

Understanding falsy values is crucial for writing concise Python code that leverages truth value testing.

Using bool in Conditional Logic

This example shows practical usage of bool in conditional statements and logical operations.

conditionals.py
def process_data(data):
    if not bool(data):
        print("No data to process")
        return
    
    print(f"Processing {len(data)} items")

process_data([])       # No data to process
process_data([1,2,3])  # Processing 3 items

# With logical operators
value = 42
print(bool(value and value > 10))  # True

The example shows bool used explicitly in conditionals, though often implicit conversion is sufficient. It also demonstrates combining with logical operators.

Explicit bool calls can make code more readable when the conversion isn't obvious.

Performance Considerations

This example compares bool performance with implicit truth testing and alternative methods.

performance.py
import timeit

def test_bool():
    return bool([1,2,3])

def test_implicit():
    if [1,2,3]:
        return True
    return False

def test_len():
    return len([1,2,3]) > 0

print("bool():", timeit.timeit(test_bool, number=1000000))
print("Implicit:", timeit.timeit(test_implicit, number=1000000))
print("len():", timeit.timeit(test_len, number=1000000))

This benchmarks different truth testing methods. bool is generally fastest for built-in types. Implicit testing is nearly identical in speed.

The len() approach is often unnecessary and slower, demonstrating why direct truth testing is preferred.

Best Practices

Source References

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Python tutorials.