Una búsqueda en Google de "python nonlocal" arrojó la Propuesta, PEP 3104 , que describe completamente la sintaxis y el razonamiento detrás de la declaración. en resumen, funciona exactamente de la misma manera que la global
declaración, excepto que se usa para referirse a variables que no son globales ni locales para la función.
Aquí hay un breve ejemplo de lo que puede hacer con esto. El generador de contadores se puede reescribir para usar esto de modo que se parezca más a los modismos de idiomas con cierres.
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
Obviamente, podría escribir esto como un generador, como:
def counter_generator():
count = 0
while True:
count += 1
yield count
Pero si bien esta es una pitón perfectamente idiomática, parece que la primera versión sería un poco más obvia para los principiantes. El uso adecuado de generadores, llamando a la función devuelta, es un punto común de confusión. La primera versión devuelve explícitamente una función.