0
respostas

Boas Práticas de Programação em Python PARTE I

Boas Práticas de Programação em Python PARTE I

Por Ricardo Costa Val do Rosario

1. PEP 8 e Estilo de Código

• Siga o guia oficial PEP 8 para formatação e legibilidade

• Use 4 espaços por nível de indentação (não misture tabs)

• Limite de 79 caracteres por linha

•	Linhas em branco: 

o	Duas antes de definições de módulos/classes

o	Uma antes de definições de funções internas

Aspecto	Padrão PEP 8

Indentação	4 espaços

Comprimento de linha	Máx. 79 caracteres

Espaços em expressões	a = b + c; não a=b+c

Imports	Standard, terceiros, locais (separados por linha em branco)

2. Convenções de Nomeação

• Variáveis e funções: snake_case

• Classes: PascalCase

• Constantes: UPPER_SNAKE_CASE

• Módulos e pacotes: nomes curtos em snake_case

Exemplo:

MAX_RETRIES = 5

def calcula_media_notas(notas):
    pass

class ProcessadorDeDados:
    pass

3. Estrutura e Organização de Projeto

• Mantenha código fonte em um diretório src/

• Separe testes em tests/

• Organize módulos por funcionalidade, não por tipo

•	Inclua arquivos de configuração: 
o	pyproject.toml ou setup.py
o	requirements.txt
o	README.md

Estrutura típica:

meu_projeto/
├── src/
│   └── meu_pacote/
│       ├── __init__.py
│       ├── modulo1.py
│       └── modulo2.py
├── tests/
│   └── test_modulo1.py
├── pyproject.toml
├── requirements.txt
└── README.md

4. Comentários e Documentação

• Documente o porquê do código, não o como

• Use docstrings para módulos, classes e funções (três aspas)

• Atualize comentários sempre que o código mudar

def filtra_pares(lista: list[int]) -> list[int]:
  
Retorna uma lista contendo apenas os números pares
presentes na lista de entrada.

return [n for n in lista if n % 2 == 0]

5. Tipagem Estática com Type Hints

• Aplique anotações de tipo para funções e métodos

• Auxilia linters e IDEs a detectar erros cedo

from typing import List, Dict

def soma_valores(dados: List[Dict[str, float]]) -> float:
    total = 0.0
    for item in dados:
        total += item["valor"]
    return total

6. Tratamento de Erros e Exceções

• Use exceções específicas em vez de except: genérico

• Restrinja o escopo do try/except ao mínimo necessário

• Utilize finally ou gerenciadores de contexto (with) para liberar recursos try:

 arquivo = open("dados.csv")
 linhas = arquivo.readlines()
finally:
 arquivo.close()

7. Testes Automatizados

• Escreva testes unitários com pytest ou unittest

• Cubra casos de sucesso e falha

• Use fixtures para preparar e limpar ambientes de teste

import pytest
from meu_pacote.modulo1 import filtra_pares

def test_filtra_pares():
    assert filtra_pares([1,2,3,4]) == [2,4]

8. Gerenciamento de Dependências e Ambientes

•	Isole ambientes com venv ou conda

•	Liste dependências em requirements.txt ou pyproject.toml

•	Congelar versões mínimas necessárias

requirements.txt

numpy>=1.24.0
pandas>=2.0.0