Entender o escopo de variáveis em Python é essencial para escrever códigos limpos, organizados e sem erros difíceis de rastrear. Muitos iniciantes se confundem quando uma variável funciona em um lugar, mas não funciona em outro. Isso acontece porque cada variável tem um alcance específico dentro do código, chamado de escopo.
Neste guia completo, você vai aprender o que é escopo de variáveis, por que ele importa e como usá-lo na prática com exemplos simples. Mesmo que você esteja começando agora em Python, este conteúdo foi criado de forma acessível e direta para facilitar seu aprendizado.
O que é Escopo de Variáveis em Python
O escopo de uma variável define onde ela pode ser usada dentro de um programa. Python sempre segue regras claras para decidir se uma variável existe e onde ela pode ser acessada. Isso evita conflitos e ajuda a manter o código organizado.
Existem dois tipos principais de escopo:
- Escopo local
- Escopo global
Ao entender esses dois grupos, você vai conseguir estruturar seu código de forma mais clara. Se quiser se aprofundar depois, consulte também nossos artigos sobre funções em Python e sobre os módulos e pacotes no Python.
Configura o vídeo do canal Escola de Código que explica melhor sobre o escopo de variáveis em Python abaixo:
Por que o Escopo é Importante
O escopo mantém o código previsível. Sem ele, seria muito fácil criar variáveis com o mesmo nome que se misturam e geram erros inesperados.
Veja alguns benefícios práticos:
- Evita sobrescrever valores por acidente.
- Mantém o código mais seguro, pois variáveis de uso interno ficam protegidas.
- Facilita a leitura, já que fica claro onde cada dado é usado.
- Ajuda a criar funções mais confiáveis e independentes.
Escopo Global em Python
Uma variável global é criada fora de funções. Isso significa que ela pode ser usada em qualquer parte do código.
Esse tipo de variável é útil quando você precisa compartilhar uma informação entre várias funções. Porém, deve ser usada com cuidado, pois pode deixar o código mais difícil de manter.
Exemplo simples
mensagem = "Olá, mundo!"
def mostrar():
print(mensagem)
mostrar()Aqui, a variável mensagem existe no programa inteiro. Como ela está fora da função, a função consegue acessá-la sem problemas.
Escopo Local em Python
Uma variável local existe apenas dentro da função onde foi criada. Ela não pode ser acessada fora dela.
Esse comportamento deixa o código mais seguro e previsível, já que cada função trabalha com seus próprios valores internos.
Exemplo
def soma():
x = 10
y = 5
return x + y
print(soma())
print(x)A última linha gera erro, porque x não existe fora da função.
Usando Variáveis Globais Dentro de Funções
Se você tentar modificar uma variável global dentro de uma função, irá gerar erro, porque o Python entende que você quer criar uma variável nova e local com o mesmo nome. Para mudar esse valor, é preciso usar a palavra global.
Exemplo
contador = 0
def aumentar():
global contador
contador = contador + 1A palavra global diz ao Python que você quer usar a variável do escopo global, não criar outra.
Por que Evitar o Uso Excessivo de Globais
Mesmo sendo úteis em alguns casos, variáveis globais podem causar problemas:
- Tornam o código mais difícil de testar.
- Criam dependências entre funções.
- Podem gerar erros silenciosos se usadas de forma incorreta.
Por isso, prefira passar valores como parâmetros sempre que possível.
Escopo Aninhado e Funções Internas
Python permite criar funções dentro de outras funções. Nesse caso, a função interna pode acessar variáveis criadas na função externa. Esse tipo de escopo é chamado de escopo não local.
Exemplo simples
def externa():
texto = "Oi"
def interna():
print(texto)
interna()Aqui, a função interna consegue acessar a variável texto mesmo ela não sendo global.
Alterando Variáveis do Escopo Externo com nonlocal
Quando você quer alterar uma variável da função externa, precisa usar a palavra nonlocal.
Exemplo
def contador():
total = 0
def aumentar():
nonlocal total
total = total + 1Essa técnica é útil em casos específicos, como criar funções geradoras de valores.
Práticas Recomendadas ao Trabalhar com Escopos
Para manter seu código limpo e fácil de entender, siga estas dicas:
- Prefira variáveis locais sempre que possível.
- Evite alterar variáveis globais.
- Use funções bem definidas para separar as responsabilidades.
- Utilize nomes claros e descritivos.
- Não reutilize nomes que podem causar confusão.
Se você é iniciante, recomendo também a leitura do artigo sobre erro try except em Python para entender como lidar com falhas causadas por escopos.
Exemplo Completo Unindo Todos os Conceitos
O exemplo abaixo mostra o uso de escopo global, local e não local em um único programa.
contador_global = 0
def criar_contador():
total = 0
def aumentar():
nonlocal total
global contador_global
total += 1
contador_global += 1
return total, contador_global
return aumentar
contador1 = criar_contador()
print(contador1())
print(contador1())Esse tipo de estrutura aparece em funções mais avançadas, como closures e decoradores.
Quando o Escopo se Torna um Problema
Você pode enfrentar erros como:
- Variável não definida.
- Variável chamada antes de ser atribuída.
- Resultado inesperado em funções.
Esses erros quase sempre estão ligados ao uso incorreto de escopo.
Um bom exercício é refatorar códigos antigos e identificar onde cada variável pertence. Isso melhora muito sua habilidade de leitura de código.
Conclusão
O escopo de variáveis em Python é um dos fundamentos mais importantes da linguagem. Ele define onde cada variável pode ser usada, evitando conflitos e deixando o código mais organizado.
Agora você entende:
- A diferença entre escopo local e global.
- Como funciona a regra LEGB.
- O papel das palavras chave global e nonlocal.
- Como evitar erros comuns relacionados ao escopo.
- Como usar escopos de forma prática em funções reais.
Dominar esse tema vai ajudar você a evoluir rapidamente no aprendizado em Python. Continue estudando conteúdos como variáveis em Python e tuplas em Python para reforçar sua base.
Perguntas Frequentes (FAQ)
1. O que é escopo de variável em Python?
É o local do código onde a variável pode ser usada.
2. O que é variável global?
É uma variável criada fora das funções.
3. O que é variável local?
É uma variável criada dentro de uma função.
4. Posso alterar uma variável global dentro da função?
Sim, usando a palavra global.
5. O que é nonlocal?
Permite alterar variáveis da função externa.
6. O que é a regra LEGB?
É a ordem usada para buscar variáveis no código.
7. Variáveis locais existem para sempre?
Não, elas acabam quando a função termina.
8. Posso usar o mesmo nome em escopos diferentes?
Sim, mas pode gerar confusão.
9. Funções internas acessam variáveis externas?
Sim, se estiverem no escopo acima.
10. Variáveis globais são recomendadas?
Devem ser usadas com cuidado.
11. Como evitar erros de escopo?
Use nomes claros e prefira variáveis locais.
12. Escopo afeta desempenho?
Afeta pouco, mas ajuda na organização do código.








