Escopo e variáveis locais
Objetivo da aula
Entender onde nomes são acessíveis e reduzir dependência de estado global.
Regra desta aula: vamos assumir que você nunca viu este assunto antes. Nenhum termo importante será usado sem explicação e todo exemplo deve ser entendido linha por linha, não apenas copiado.
Começando do zero
Escopo determina onde um nome pode ser acessado. Variáveis criadas dentro de uma função são normalmente locais àquela chamada. Isso ajuda a manter responsabilidades separadas e evita que qualquer parte do programa altere qualquer valor sem controle.
Uma imagem mental para entender
Imagine salas com quadros brancos próprios. Uma anotação feita no quadro da sala A não aparece automaticamente no quadro da sala B. Variáveis locais funcionam como essas anotações: pertencem ao contexto da função. Existem mecanismos para acessar estado global, mas o uso indiscriminado cria dependências difíceis de acompanhar.
Conceitos essenciais, sem pular etapas
Variável local
Um nome atribuído dentro de uma função é, em regra, local àquela função. Ele é criado para a execução da chamada e não deve ser tratado como um nome disponível em todo o programa.
Parâmetros são locais
Os parâmetros recebem argumentos e existem dentro do escopo da função.
Nome global
Um nome definido no nível do módulo pode ser lido de dentro de funções em certos contextos, mas depender de globais mutáveis torna a função menos previsível.
Sombreamento
Uma variável local pode ter o mesmo nome de uma global e “esconder” aquela associação dentro do escopo local. Isso é legal, mas pode confundir.
Preferência didática
Neste nível, prefira passar dados por parâmetros e devolver resultados com return em vez de modificar variáveis globais.
Modelo mental
ARGUMENTOS → PARÂMETROS LOCAIS → VARIÁVEIS LOCAIS → return → VALOR FORA DA FUNÇÃO
Exemplo 1 — primeiro veja o programa inteiro
taxa = 0.10
def calcular_desconto(preco):
valor_desconto = preco * taxa
return valor_desconto
desconto = calcular_desconto(100)
print(desconto)
Agora vamos ler linha por linha
taxaestá no nível do módulo e é lida pela função.precoé parâmetro local.valor_descontoé criado dentro da função e não existe como nome local fora dela.- Para código mais independente, a taxa também poderia ser parâmetro, deixando todas as dependências explícitas.
Saída esperada
10.0
Exemplo 2 — o mesmo conceito em outra situação
def calcular_desconto(preco, taxa):
valor_desconto = preco * taxa
return valor_desconto
print(calcular_desconto(100, 0.10))
Esta versão recebe todas as informações necessárias pela assinatura. Ela é mais fácil de testar com taxas diferentes e depende menos de estado externo.
Experimento guiado
Não pule esta parte. Programação só começa a fazer sentido quando você prevê um resultado, executa e compara a previsão com o que realmente aconteceu.
- Tente acessar uma variável local fora da função e observe o erro.
- Converta uma dependência global simples em parâmetro.
- Crie duas chamadas com argumentos diferentes e confirme que os valores locais não “vazam” de uma chamada para outra.
- Evite
globalneste módulo; primeiro aprenda a projetar funções com entradas e saídas explícitas.
Mini desafio
Crie uma função calcular_area(largura, altura) que use uma variável local area e retorne o resultado.
Solução comentada
def calcular_area(largura, altura):
area = largura * altura
return area
resultado = calcular_area(4, 3)
print(resultado)
Depois de executar a solução, altere pelo menos um valor e explique por que o novo resultado mudou. Se você só copiou e não consegue explicar cada linha, refaça o desafio em uma versão menor.
Erros comuns e por que acontecem
- Esperar usar fora da função uma variável que só foi criada localmente.
- Usar variáveis globais mutáveis para tudo e tornar a ordem das chamadas importante demais.
- Reutilizar o mesmo nome em escopos diferentes sem necessidade e confundir a leitura.
- Pensar em escopo como “segurança absoluta”; ele é uma regra de resolução de nomes, não um mecanismo completo de proteção de dados.
Cheque se você realmente entendeu
Parâmetros pertencem a qual escopo?
Resposta: Ao escopo local da função durante a chamada.
Por que passar dados por parâmetros ajuda?
Resposta: Porque deixa dependências explícitas e facilita testes e reutilização.
Uma variável local deve ser acessível fora da função pelo mesmo nome?
Resposta: Não, normalmente não.
Resumo em linguagem simples
Nesta aula, o ponto central foi Escopo e variáveis locais. Tente explicar o modelo ARGUMENTOS → PARÂMETROS LOCAIS → VARIÁVEIS LOCAIS → return → VALOR FORA DA FUNÇÃO sem olhar a tela. Depois, escreva um exemplo próprio menor que os apresentados. Esse exercício de explicação é parte do aprendizado, não um extra.
Conexão com a próxima aula
Na próxima aula, Decomposição, contratos e docstrings, vamos aproveitar exatamente o que foi construído aqui. Você não precisa memorizar tudo; precisa conseguir reconhecer o conceito e reconstruí-lo com raciocínio e testes.