Submódulo 4: Módulos e organização de código: importação, biblioteca padrão e módulo próprio

Site: Lumina
Curso: Python para Iniciantes: Lógica e Programação
Livro: Submódulo 4: Módulos e organização de código: importação, biblioteca padrão e módulo próprio
Impresso por: Usuário visitante
Data: quarta-feira, 17 set. 2025, 21:06

Descrição

Este submódulo aprofunda a organização de código em Python, explorando importação, namespace, uso da biblioteca padrão e a criação de módulos próprios. Vamos conectar esses conceitos à construção de projetos reutilizáveis, o que facilita a leitura, a manutenção e a apresentação de portfólio para oportunidades de carreira.

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.

Biblioteca padrão e criação de módulos próprios

🎯 Biblioteca padrão e módulos próprios

Neste submódulo, usamos módulos da biblioteca padrão como math, datetime e exploramos como importá-los. Por exemplo, podemos fazer import math as m ou from math import sqrt para ter acesso direto a sqrt. Cada módulo traz funções úteis já prontas, evitando reinventar a roda.

# Exemplo de uso de módulos da biblioteca padrão
import math as m
from math import sqrt

print(m.pi)
print(sqrt(16))

Além disso, vamos criar um módulo próprio simples, como utils.py, com funções úteis que poderão ser usadas por vários scripts. Em seguida, veremos como importá-lo em outros arquivos.

Pacotes simples e organização de projeto

🎯 Pacotes simples e organização de projeto

Um pacote é um diretório que contém módulos Python e um arquivo __init__.py (pode ficar vazio). Pacotes permitem organizar o código em unidades reutilizáveis. Por exemplo, podemos ter a estrutura portfolio/utils.py e importar de forma conveniente em scripts maiores.

# portfolio/__init__.py (pode ficar vazio)
#portfolio/utils.py
def validar_numero(n):
    return isinstance(n, (int, float)) and n >= 0

# main.py
from portfolio.utils import validar_numero
print(validar_numero(5))

Além disso, discutiremos como organizar módulos em pacotes simples para facilitar a leitura e a reutilização, preparando o terreno para um portfólio profissional.

graph TD; app[Aplicação Principal] --> pkg[Pacote portfolio]; pkg --> mod[utils.py]; app --> guard[IF_NAME_MAIN]

🎯 Exercícios

🎯 Exercícios: Módulos e organização de código: importação, biblioteca padrão e módulo próprio

Teste seus conhecimentos com estas questões de múltipla escolha. Cada questão tem apenas uma resposta correta.

Questão 1

O que é o namespace em Python e por que cada módulo tem seu próprio espaço de nomes para evitar conflitos?

Questão 2

Ao usar import math, como você acessa a função sqrt?

Questão 3

Qual é o efeito de usar 'from math import sqrt' em relação aos nomes disponíveis no namespace?

Questão 4

O que torna um diretório um pacote Python e permite importar seus módulos com 'from pacote import modulo'?

Questão 5

Qual é a finalidade do bloco if __name__ == '__main__' em um script Python?