Olá, Luísa! Tudo bem?
Sua dúvida é excelente e toca em um ponto fundamental da arquitetura de software: o encapsulamento. Como você já percebeu, a palavra-chave global parece um "atalho mágico", mas em projetos reais ela costuma ser vista como um sinal de alerta (um code smell).
Por que o global é considerado perigoso?
O grande problema é a previsibilidade. Imagine que você está trabalhando em um projeto com milhares de linhas de código:
- Efeito Colateral (Side Effects): Se uma função altera uma variável global, qualquer outra parte do programa que use essa mesma variável pode começar a se comportar de forma estranha sem que você saiba o porquê. É o famoso "consertei aqui e quebrou lá".
- Dificuldade em Testes: Para testar uma função que usa
global, você precisa configurar todo o "estado do mundo" do seu programa antes. Funções que dependem apenas de seus parâmetros e do return (chamadas de funções puras) são muito mais fáceis de testar e isolar. - Dificuldade de Rastreamento: Em sistemas complexos, fica quase impossível saber qual função alterou o valor da variável por último, dificultando muito o processo de depuração (debug).
O caminho do return (A boa prática)
Você está corretíssima: usar o return é a forma mais segura e profissional. Isso mantém a função como uma "caixa preta": ela recebe algo, processa e devolve um resultado, sem "sujar" o que está do lado de fora.
Quando o uso de global é válido?
Embora seja raro e deva ser evitado, existem cenários específicos onde ele pode aparecer:
- Configurações Globais Simples: Em scripts pequenos de automação, para definir uma configuração que raramente muda, mas precisa ser acessada por todos.
- Contadores de Performance: Às vezes usado em scripts de monitoramento rápidos para contar quantas vezes algo aconteceu no sistema todo.
- Aprendizado e Prototipagem: Entender como o escopo funciona é vital para entender como o Python gerencia a memória.
Comparação Prática
Com global (Frágil e difícil de rastrear):
saldo = 100
def sacar(valor):
global saldo # Altera a variável lá fora diretamente
saldo -= valor
Com return (Robusto e explícito):
def sacar(saldo_atual, valor):
return saldo_atual - valor # Devolve o novo valor sem "quebrar" nada fora
saldo = 100
saldo = sacar(saldo, 20) # Controle total de quem está alterando o quê
Sua intuição de que o return é mais seguro está 100% alinhada com o que o mercado exige de um profissional de dados. O isolamento de escopo é o que permite que seu código seja escalável e fácil de manter por outras pessoas.
Espero que possa ter lhe ajudado!
Já aconteceu de você tentar alterar uma variável dentro de uma função e o Python dar erro porque você esqueceu de passar ela como parâmetro ou usar o return?