Organização de código: imports, namespace e proteção de testes

🎯 Organização de código: imports, namespace e proteção de testes

Vamos entender por que dividir o código em módulos facilita a leitura, a reutilização e a manutenção. Relembrando o que vimos até agora, a linguagem Python trabalha com um sistema de importação que busca módulos no ambiente de execução e os disponibiliza para o seu script.

O conceito de namespace explica como Python resolve nomes: cada módulo tem seu próprio espaço de nomes, o que evita conflitos entre funções, classes e variáveis com o mesmo nome.

Ao usar import, você carrega o módulo inteiro e acessa seus elementos com o prefixo do módulo. Com from ... import ..., você traz apenas o que precisa, tornando o código mais conciso. Usar alias (por exemplo import math as m) ajuda a reduzir o esforço de digitação e a evitar conflitos. Por fim, o bloco if __name__ == '__main__' permite que o código seja testado como script sem ser executado ao importar o módulo.

# Exemplo de importação e alias
import math as m
from math import sqrt

def raiz_quadrada(x):
    return sqrt(x)

if __name__ == '__main__':
    print(raiz_quadrada(9))  # saída: 3.0
    print(m.pi)              # saída: 3.14159...

Agora, pense no seu projeto: você pode criar um módulo próprio (por exemplo, utils.py) para armazenar funções utilitárias compartilhadas entre scripts. Assim, você reduz duplicação e facilita testes e refatoração.

graph TD; app[Aplicação Principal] --> utils[Módulo Utils (utils.py)]; utils --> math[math], datetime[datetime]; app --> main_guard[Bloco if __name__ == '__main__']

Desafio 1: crie um arquivo utils.py com pelo menos 2 funções utilitárias (por exemplo, saudacao e soma). Em seguida, crie um script main.py que importa essas funções e as utiliza. Rode o script diretamente para ver a saída; depois importe-as sem executar o main automaticamente.

Curiosidade: você já viu como o sistema de importação do Python pode localizar módulos em várias pastas? O mecanismo usa sys.path e pode ser estendido com caminhos adicionais ou pacotes instalados.