# Python Nested Functions

> Learn how nested functions work in Python: defining a function inside another to hide local helpers, and using nonlocal to reach the outer variables.

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

Functions in [Python](https://flaviocopes.com/python-introduction/) can be nested inside other functions.

A function defined inside a function is visible only inside that function.

This is useful to create utilities that are useful to a function, but not useful outside of it.

You might ask: why should I be "hiding" this function, if it does not harm?

One, because it's always best to hide functionality that's local to a function, and not useful elsewhere.

Also, because we can make use of closures (more on this later).

Here is an example:

```python
def talk(phrase):
    def say(word):
        print(word)

    words = phrase.split(' ')
    for word in words:
        say(word)

talk('I am going to buy the milk')
```

If you want to access a variable defined in the outer function from the inner function, you first need to declare it as `nonlocal`:

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

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

    increment()

count()
```

This is useful especially with closures, as we'll see later.
