Un nome è risolto cercando prima lo scope locale, poi quelle delle funzioni esterne (enclosing), poi il modulo globale, infine i built-in. `global x` e `nonlocal x` permettono di assegnare rispettivamente al modulo o allo scope esterno non globale.
Esempio
counter = 0
def outer():
x = 1
def inner():
nonlocal x
x += 1
return x
return inner