Módulos e import
Objetivo da aula
Separar funções em arquivos e reutilizá-las.
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
Um módulo Python é, de forma simples, um arquivo de código que pode ser importado por outro arquivo. Separar funções em módulos ajuda a organizar responsabilidades e reutilizar código. import torna nomes de outro módulo disponíveis por uma interface explícita.
Uma imagem mental para entender
Imagine um fichário com divisórias: “cálculos”, “arquivos”, “interface”. Cada divisória guarda um conjunto relacionado de instruções. Em vez de colocar tudo em uma folha enorme, módulos dividem o programa em arquivos com papéis claros.
Conceitos essenciais, sem pular etapas
Módulo
Um arquivo .py que pode definir funções, constantes e outros nomes.
import modulo
Carrega o módulo e normalmente acessamos membros como modulo.funcao().
from modulo import nome
Importa um nome específico para o escopo atual. É conveniente, mas deve permanecer claro de onde o nome veio.
__name__
Quando um arquivo é executado diretamente, seu __name__ é "__main__". Quando é importado, __name__ corresponde ao módulo. Isso permite separar definições de um ponto de entrada.
Evitar efeito inesperado ao importar
Código de teste ou interface colocado no nível superior roda durante a importação. O padrão if __name__ == "__main__": ajuda a controlar esse comportamento.
Modelo mental
MÓDULO A DEFINE → MÓDULO B IMPORTA → USA INTERFACE → PONTO DE ENTRADA COORDENA
Exemplo 1 — primeiro veja o programa inteiro
# arquivo calculos.py
def dobro(numero):
return numero * 2
# arquivo app.py
import calculos
resultado = calculos.dobro(7)
print(resultado)
Agora vamos ler linha por linha
calculos.pydefine uma responsabilidade reutilizável.app.pyimporta o módulo pelo nome.- A notação
calculos.dobrodeixa claro de onde veio a função. - Os dois arquivos precisam estar em uma organização de importação compatível; neste curso, manter na mesma pasta simplifica o exercício.
Saída esperada
14
Exemplo 2 — o mesmo conceito em outra situação
def main():
print("Programa iniciado")
if __name__ == "__main__":
main()
Quando esse arquivo é executado diretamente, main() roda. Se for importado por outro módulo, as definições ficam disponíveis sem executar automaticamente o ponto de entrada.
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.
- Crie
calculos.pyeapp.pyna mesma pasta. - Importe o módulo e chame uma função.
- Adicione temporariamente um
print()no nível superior decalculos.pye observe que ele roda ao importar; depois remova. - Use o padrão
main()no arquivo principal.
Mini desafio
Crie módulo texto.py com função normalizar(texto) que retorne texto.strip().lower(). Importe em app.py.
Solução comentada
# texto.py
def normalizar(texto):
return texto.strip().lower()
# app.py
import texto
print(texto.normalizar(" SIM "))
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
- Criar arquivos com nomes que conflitam com módulos da biblioteca padrão, como
json.py, e depois confundir a importação. - Executar código de interface no nível superior de um módulo reutilizável e provocar efeitos ao importar.
- Usar
from modulo import *e perder clareza sobre a origem dos nomes. - Circular dependências entre módulos sem compreender a ordem de importação.
Cheque se você realmente entendeu
O que é um módulo neste contexto?
Resposta: Um arquivo Python que define código reutilizável e pode ser importado.
Para que serve o padrão if __name__ == "__main__"?
Resposta: Para executar um ponto de entrada apenas quando o arquivo é executado diretamente.
Qual vantagem de modulo.funcao()?
Resposta: Deixa explícita a origem da função e organiza o namespace.
Resumo em linguagem simples
Nesta aula, o ponto central foi Módulos e import. Tente explicar o modelo MÓDULO A DEFINE → MÓDULO B IMPORTA → USA INTERFACE → PONTO DE ENTRADA COORDENA 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, Organização de um pequeno programa, 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.