# Python Closures

> Learn how closures work in Python: when you return a nested function, it keeps access to the variables of its enclosing function even after it ends.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2021-01-08 | Topics: [Python](https://flaviocopes.com/tags/python/) | Canonical: https://flaviocopes.com/python-closures/

We've previously seen how to create a [nested function in Python](https://flaviocopes.com/python-nested-functions/).

If you return a nested function from a function, that nested function has access to the variables defined in that function, even if that function is not active any more.

Here is a simple counter example.

```python
def counter():
    count = 0

    def increment():
        nonlocal count
        count = count + 1
        return count

    return increment

increment = counter()

print(increment()) # 1
print(increment()) # 2
print(increment()) # 3
```

We return the `increment()` inner function, and that has still access to the state of the `count` variable even though the `counter()` function has ended.
