Fundamentos do Python para Iniciantes

0/31 aulas0%
teoria

Escopo de Variáveis: Local e Global

Aprenda sobre escopo de variáveis: local e global

30 min
Aula 3 de 5

Escopo de Variáveis: Local e Global no Python

Olá! Seja bem-vindo(a) à nossa aula sobre um conceito fundamental em programação: o escopo de variáveis. Entender como o Python gerencia o acesso às suas variáveis é crucial para escrever código robusto, legível e livre de bugs. 💡

Nesta aula, vamos mergulhar nos dois principais tipos de escopo: local e global, e entender como eles afetam a visibilidade e a vida útil das suas variáveis.


1. Introdução ao Escopo de Variáveis

Em Python, o escopo de uma variável refere-se à região do código onde essa variável pode ser acessada ou referenciada. Pense nele como o "alcance" ou a "visibilidade" de uma variável.

Por que isso é importante? 🤔

  • Organização: Ajuda a organizar seu código, garantindo que as variáveis sejam usadas apenas onde são relevantes.
  • Prevenção de Conflitos: Evita que variáveis com o mesmo nome em diferentes partes do programa interfiram umas nas outras.
  • Manutenção: Facilita a depuração e a manutenção do código, pois você sabe exatamente onde uma variável pode ser alterada.

Existem vários tipos de escopo em Python, mas para iniciantes, os mais importantes são o escopo local e o escopo global.


2. Escopo Local

Uma variável definida dentro de uma função possui escopo local. Isso significa que ela só pode ser acessada e utilizada dentro daquela função específica. Assim que a função termina sua execução, as variáveis locais são destruídas e seus valores são perdidos.

Características do Escopo Local:

  • Visibilidade: Apenas dentro da função onde foi definida.
  • Tempo de Vida: Existe enquanto a função está em execução.
  • Isolamento: Funções diferentes podem ter variáveis locais com o mesmo nome sem causar conflitos.

Exemplo de Escopo Local:

# Exemplo 1: Variável de escopo local
def minha_funcao():
    mensagem = "Olá do escopo local!"  # Variável local
    print(mensagem)
 
minha_funcao()
# print(mensagem) # Isso causaria um erro: NameError, porque 'mensagem' não existe fora da função

Saída:

Olá do escopo local!

Neste exemplo, mensagem é uma variável local de minha_funcao. Tentando acessá-la fora da função resultaria em um NameError, pois ela está fora do seu escopo de visibilidade.


3. Escopo Global

Uma variável definida fora de qualquer função (diretamente no nível superior de um módulo ou script Python) possui escopo global. Isso significa que ela pode ser acessada de qualquer lugar no código, incluindo dentro de funções.

Características do Escopo Global:

  • Visibilidade: Em todo o módulo/script onde foi definida.
  • Tempo de Vida: Existe enquanto o programa estiver em execução.
  • Compartilhamento: Pode ser acessada e lida por múltiplas funções.

Exemplo de Escopo Global (Leitura):

# Exemplo 2: Variável de escopo global sendo lida
nome_global = "Python"  # Variável global
 
def saudar_global():
    print(f"Olá, {nome_global}!") # Acessando a variável global
 
def despedir_global():
    print(f"Até logo, {nome_global}!") # Acessando a variável global
 
saudar_global()
despedir_global()
print(f"Variável global fora das funções: {nome_global}")

Saída:

Olá, Python!
Até logo, Python!
Variável global fora das funções: Python

Neste caso, nome_global é acessível tanto dentro quanto fora das funções saudar_global e despedir_global.

Modificando Variáveis Globais (Atenção! ⚠️)

Aqui é onde as coisas ficam um pouco mais interessantes e podem gerar confusão. Se você tentar modificar uma variável global dentro de uma função sem a palavra-chave global, o Python criará uma nova variável local com o mesmo nome dentro da função, deixando a variável global inalterada.

Exemplo de Comportamento Inesperado (sem global):

# Exemplo 3: Tentativa de modificar global sem a palavra-chave 'global'
contador = 0 # Variável global
 
def incrementar_contador_errado():
    contador = 1 # Isso cria uma NOVA variável LOCAL chamada 'contador'
    print(f"Contador dentro da função (local): {contador}")
 
print(f"Contador antes da chamada (global): {contador}")
incrementar_contador_errado()
print(f"Contador depois da chamada (global): {contador}") # A variável global não foi alterada!

Saída:

Contador antes da chamada (global): 0
Contador dentro da função (local): 1
Contador depois da chamada (global): 0

Como você pode ver, a variável global contador permaneceu 0. A atribuição contador = 1 dentro da função incrementar_contador_errado criou uma variável local contador que "escondeu" a global durante a execução da função.

Usando a Palavra-chave global para Modificar:

Para realmente modificar uma variável global dentro de uma função, você deve usar a palavra-chave global antes do nome da variável. Isso informa ao Python que você quer trabalhar com a variável global existente, e não criar uma nova local.

# Exemplo 4: Modificando variável global com a palavra-chave 'global'
total_pedidos = 10 # Variável global
 
def processar_pedido():
    global total_pedidos # Declara que queremos usar a variável global 'total_pedidos'
    total_pedidos += 1   # Agora estamos modificando a variável global
    print(f"Total de pedidos dentro da função: {total_pedidos}")
 
print(f"Total de pedidos antes: {total_pedidos}")
processar_pedido()
processar_pedido()
print(f"Total de pedidos depois: {total_pedidos}") # A variável global foi alterada!

Saída:

Total de pedidos antes: 10
Total de pedidos dentro da função: 11
Total de pedidos dentro da função: 12
Total de pedidos depois: 12

✅ Usar global para modificar variáveis globais é a forma correta.


Regra LEGB: A Ordem de Busca do Python 📚

O Python segue uma ordem específica para resolver nomes de variáveis, conhecida como regra LEGB:

  1. Local: O escopo mais interno, dentro da função atual.
  2. Enclosing function locals: Escopo de funções aninhadas (veremos mais sobre isso em aulas futuras).
  3. Global: Escopo do módulo, definido no nível superior do arquivo.
  4. Built-in: Escopo de nomes pré-definidos do Python (como print, len, str, etc.).

Quando você referencia uma variável, o Python procura por ela nessa ordem. Assim que encontra, para a busca.


4. Código de Exemplo Didático (Baseado na Documentação)

Embora a documentação oficial do Python não forneça um "código de exemplo" único para escopo, ela descreve o comportamento das palavras-chave e a regra LEGB. Os exemplos acima são construídos para refletir a clareza e a precisão da documentação, focando nos pontos essenciais.

Você pode consultar a documentação oficial sobre global e resolução de nomes aqui:


5. Desafios de Conhecimento (Teoria) 🧠

Para testar seu entendimento, tente responder às seguintes perguntas ou prever a saída dos códigos:

  1. Qual a saída do código abaixo e por quê?

    valor = 50
     
    def dobrar_valor():
        valor_dobrado = valor * 2
        print(f"Dentro da função: {valor_dobrado}")
     
    dobrar_valor()
    print(f"Fora da função: {valor}")
  2. Corrija o código abaixo para que a função alterar_nome realmente modifique a variável global nome_usuario:

    nome_usuario = "Visitante"
     
    def alterar_nome(novo_nome):
        nome_usuario = novo_nome # Linha a ser corrigida
        print(f"Nome dentro da função: {nome_usuario}")
     
    print(f"Nome antes: {nome_usuario}")
    alterar_nome("Alice")
    print(f"Nome depois: {nome_usuario}")
  3. Explique a principal diferença entre uma variável de escopo local e uma de escopo global em termos de sua visibilidade e tempo de vida.


6. Resumo e Próximos Passos 🚀

Nesta aula, exploramos os conceitos de escopo local e global em Python:

  • Escopo Local: Variáveis definidas dentro de funções, visíveis apenas ali, e que duram enquanto a função executa.
  • Escopo Global: Variáveis definidas no nível superior do script, visíveis em todo o módulo.
  • A palavra-chave global é essencial para modificar variáveis globais dentro de funções, evitando a criação de variáveis locais com o mesmo nome.
  • A regra LEGB define a ordem em que o Python procura por variáveis.

Compreender o escopo é um passo crucial para escrever código Python mais limpo, eficiente e fácil de depurar. ✨

Próximos Passos:

  • Continue praticando com exemplos e criando suas próprias funções com variáveis locais e globais.
  • Em aulas futuras, exploraremos o escopo de funções aninhadas e a palavra-chave nonlocal, que é usada para modificar variáveis em escopos Enclosing.
  • Pense nas boas práticas: o uso excessivo de variáveis globais pode tornar o código difícil de entender e manter. Prefira passar dados como argumentos para funções e retornar valores quando possível.

Até a próxima aula! 👋

© 2025 Escola All Dev. Todos os direitos reservados.

Escopo de Variáveis: Local e Global - Fundamentos do Python para Iniciantes | escola.all.dev.br