Uma pesquisa no Google por "python não-local" exibiu a proposta, PEP 3104 , que descreve completamente a sintaxe e o raciocínio por trás da declaração. em resumo, funciona exatamente da mesma maneira que a global
instrução, exceto que é usada para se referir a variáveis que não são globais nem locais para a função.
Aqui está um breve exemplo do que você pode fazer com isso. O contador gerador pode ser reescrito para usar isso, para que ele se pareça mais com os idiomas de idiomas com fechamento.
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
Obviamente, você pode escrever isso como um gerador, como:
def counter_generator():
count = 0
while True:
count += 1
yield count
Mas, embora seja um python perfeitamente idiomático, parece que a primeira versão seria um pouco mais óbvia para iniciantes. Usar corretamente geradores, chamando a função retornada, é um ponto comum de confusão. A primeira versão retorna explicitamente uma função.