If you return from a function a nested function, the nested function still has access to the variables that are defined in it regardless whether the function is active or inactive. To demonstrate, let’s look at the following example:

def math():
    number = 1

    def multiply():
        nonlocal number
        number = number * 2
        return number
    return multiply
calculate = math()

print(calculate()) # 2
print(calculate()) # 4
print(calculate()) # 8

What happens above is that the multiply() inner function is returned which has access to the number variable from the outer function. The math() function is no longer being run.