A instrução nonlocal em Python
Há casos em que uma função externa
tem uma variável à qual precisamos
acessar na função interna. Vamos declarar
na função outer a variável i.
Em relação à função interna, esta
variável será uma variável externa (variáveis
globais são apenas aquelas declaradas
NO código externo). E para a função inner
vamos definir a adição de um a i:
def outer():
i = 0
def inner():
i += 1 # resultará em erro
inner()
return i
No entanto, para inner a variável i
é uma variável local, Python a considera
não declarada e exibe o erro correspondente.
Antes, esse tipo de erro era corrigido
usando a instrução global. No entanto,
aqui i é uma variável externa,
portanto, deve-se usar a instrução
nonlocal. Ela busca os nomes de variáveis listados
no escopo mais próximo,
excluindo o global, ou seja, i
dentro de inner será obtida da variável
declarada acima desta função:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # exibirá 1
No código a seguir, algum programador cometeu um erro:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
O que há de errado com este código? Encontre e corrija o erro do autor do código.
No código a seguir, algum programador cometeu um erro:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
O que há de errado com este código? Encontre e corrija o erro do autor do código.