# Python Booleans

> Learn how Python booleans work, with the True and False values, how other types evaluate as truthy or falsy, and the handy any() and all() global functions.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2020-12-04 | Topics: [Python](https://flaviocopes.com/tags/python/) | Canonical: https://flaviocopes.com/python-booleans/

[Python](https://flaviocopes.com/python-introduction/) provides the `bool` type, which can have two values: `True` and `False` (capitalized)

```python
done = False
done = True
```

Booleans are especially useful with conditional control structures like `if` statements:

```python
done = True

if done:
    # run some code here
else:
    # run some other code
```

When evaluating a value for `True` or `False`, if the value is not a `bool` we have some rules depending on the type we're checking:

- numbers are always `True` unless for the number `0`
- strings are `False` only when empty
- lists, tuples, sets, dictionaries are `False` only when empty

You can check if a value is a boolean in this way:

```python
done = True
type(done) == bool #True
```

Or using `isinstance()`, passing 2 arguments: the variable, and the `bool` class:

```python
done = True
isinstance(done, bool) #True
```

The global `any()` function is also very useful when working with booleans, as it returns `True` if any of the values of the iterable (list, for example) passed as argument are `True`:

```python
book_1_read = True
book_2_read = False

read_any_book = any([book_1_read, book_2_read])
```

The global `all()` function is same, but returns `True` if all of the values passed to it are `True`:

```python
ingredients_purchased = True
meal_cooked = False

ready_to_serve = all([ingredients_purchased, meal_cooked])
```
