Módulo 19: Prática Avançada de Escopo

Vamos aprofundar nossa compreensão da regra LEGB e do `nonlocal`!

Explorador da Regra LEGB

Python procura variáveis na ordem: Local, Enclosing (Funções Envolventes), Global, Built-in (Integrado). Clique em cada variável usada abaixo para ver onde o Python a encontra! Abstração / Decomposição: Entender LEGB ajuda a abstrair como o Python gerencia nomes e a decompor o fluxo de busca.

global_scope_var = "Eu sou Global"

def outer_function():
    enclosing_scope_var = "Eu sou Enclosing"

    def inner_function():
        local_scope_var = "Eu sou Local"
        print(local_scope_var)       # Encontrada onde?
        print(enclosing_scope_var) # E esta?
        print(global_scope_var)    # E esta?
        print(len("test"))             # E esta função?

    inner_function()
    print(enclosing_scope_var) # Fora da inner, onde é encontrada?

outer_function()
print(global_scope_var)    # E esta, fora de tudo?

Identifique onde Python encontra cada variável usada!

Desafio `nonlocal`

A palavra-chave `nonlocal` permite que uma função interna modifique uma variável de uma função externa (mas não global). Corrija o código abaixo usando `nonlocal` para que a função `inner` modifique `outer_var` e o código imprima `Valor final: 15`. Depuração: `nonlocal` é essencial para depurar casos onde você *quer* modificar uma variável de escopo envolvente, evitando criar uma nova local por engano.

Saída Esperada: Dentro da inner: 15
Valor final: 15
A saída aparecerá aqui...

Prática Avançada de Escopo Concluída!

Parabéns por dominar a regra LEGB e o `nonlocal`! Entender esses conceitos avançados de escopo é crucial para escrever código Python mais complexo e livre de bugs.
Você está pronto para aplicar esse conhecimento ou revisar o material!