python-patterns
Ajuda seu agente a escrever código Python seguindo as melhores práticas. Ele garante que o código seja claro, eficiente e fácil de manter, usando padrões e dicas de estilo.
O que ela faz
Este guia ensina como escrever código Python de forma clara, eficiente e fácil de entender, seguindo as melhores práticas. Ele cobre como organizar o código, usar dicas de tipo para clareza e lidar com erros de forma inteligente.
Quando usar
- ✓Ao escrever um novo código Python.
- ✓Ao revisar o código de outra pessoa.
- ✓Ao tentar melhorar um código existente.
Exemplo do que pedir para a IA
“Como posso escrever uma função em Python que seja fácil de ler e que retorne apenas os usuários ativos de uma lista?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele mostra exemplos de código bom e ruim para ilustrar os princípios. Ele explica o uso de 'type hints' para indicar os tipos de dados esperados e como usar 'context managers' para gerenciar recursos como arquivos.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill python-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/python-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Desenvolvimento Python
Padrões idiomáticos do Python e melhores práticas para construir aplicações robustas, eficientes e fáceis de manter.
Quando Ativar
- Escrevendo código Python novo
- Revisando código Python
- Refatorando código Python existente
- Projetando pacotes/módulos Python
Princípios Fundamentais
1. Legibilidade Importa
Python prioriza a legibilidade. O código deve ser óbvio e fácil de entender.
# Good: Clear and readable
def get_active_users(users: list[User]) -> list[User]:
"""Return only active users from the provided list."""
return [user for user in users if user.is_active]
# Bad: Clever but confusing
def get_active_users(u):
return [x for x in u if x.a]
2. Explícito é Melhor que Implícito
Evite "mágica"; seja claro sobre o que seu código faz.
# Good: Explicit configuration
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Bad: Hidden side effects
import some_module
some_module.setup() # What does this do?
3. EAFP - É Mais Fácil Pedir Perdão do que Permissão
Python prefere tratamento de exceções em vez de verificar condições.
# Good: EAFP style
def get_value(dictionary: dict, key: str, default_value: Any = None) -> Any:
try:
return dictionary[key]
except KeyError:
return default_value
# Bad: LBYL (Look Before You Leap) style
def get_value(dictionary: dict, key: str, default_value: Any = None) -> Any:
if key in dictionary:
return dictionary[key]
else:
return default_value
Dicas de Tipo (Type Hints)
Anotações de Tipo Básicas
from typing import Optional, List, Dict, Any
def process_user(
user_id: str,
data: Dict[str, Any],
active: bool = True
) -> Optional[User]:
"""Process a user and return the updated User or None."""
if not active:
return None
return User(user_id, data)
Dicas de Tipo Modernas (Python 3.9+)
# Python 3.9+ - Use built-in types
def process_items(items: list[str]) -> dict[str, int]:
return {item: len(item) for item in items}
# Python 3.8 and earlier - Use typing module
from typing import List, Dict
def process_items(items: List[str]) -> Dict[str, int]:
return {item: len(item) for item in items}
Aliases de Tipo e TypeVar
from typing import TypeVar, Union
# Type alias for complex types
JSON = Union[dict[str, Any], list[Any], str, int, float, bool, None]
def parse_json(data: str) -> JSON:
return json.loads(data)
# Generic types
T = TypeVar('T')
def first(items: list[T]) -> T | None:
"""Return the first item or None if list is empty."""
return items[0] if items else None
Duck Typing Baseado em Protocolos
from typing import Protocol
class Renderable(Protocol):
def render(self) -> str:
"""Render the object to a string."""
def render_all(items: list[Renderable]) -> str:
"""Render all items that implement the Renderable protocol."""
return "\n".join(item.render() for item in items)
Padrões de Tratamento de Erros
Tratamento Específico de Exceções
# Good: Catch specific exceptions
def load_config(path: str) -> Config:
try:
with open(path) as f:
return Config.from_json(f.read())
except FileNotFoundError as e:
raise ConfigError(f"Config file not found: {path}") from e
except json.JSONDecodeError as e:
raise ConfigError(f"Invalid JSON in config: {path}") from e
# Bad: Bare except
def load_config(path: str) -> Config:
try:
with open(path) as f:
return Config.from_json(f.read())
except:
return None # Silent failure!
Encadeamento de Exceções
def process_data(data: str) -> Result:
try:
parsed = json.loads(data)
except json.JSONDecodeError as e:
# Chain exceptions to preserve the traceback
raise ValueError(f"Failed to parse data: {data}") from e
Hierarquia de Exceções Personalizadas
class AppError(Exception):
"""Base exception for all application errors."""
pass
class ValidationError(AppError):
"""Raised when input validation fails."""
pass
class NotFoundError(AppError):
"""Raised when a requested resource is not found."""
pass
# Usage
def get_user(user_id: str) -> User:
user = db.find_user(user_id)
if not user:
raise NotFoundError(f"User not found: {user_id}")
return user
Gerenciadores de Contexto
…
Perguntas frequentes
O que são 'type hints'?
'Type hints' são como anotações no código que dizem qual tipo de informação uma variável ou função espera (ex: texto, número) e qual tipo ela retorna. Isso ajuda a evitar erros e torna o código mais fácil de entender.
O que significa 'EAFP'?
'EAFP' significa 'É mais fácil pedir perdão do que permissão'. Em programação, isso quer dizer que é melhor tentar fazer algo e lidar com um erro se ele acontecer, em vez de verificar todas as condições possíveis antes de tentar.
O que são 'context managers'?
'Context managers' são ferramentas que ajudam a gerenciar recursos, como abrir e fechar arquivos automaticamente. Eles garantem que os recursos sejam liberados corretamente, mesmo que ocorram erros.
Detalhes
Descrição original do autor
Pythonic idioms, PEP 8 standards, type hints, and best practices for building robust, efficient, and maintainable Python applications. Use when writing or reviewing Python code and idiomatic structure, typing, or PEP 8 is in question.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #103
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
karpathy-guidelines
Ajuda seu agente a escrever código melhor, evitando erros comuns. É útil para garantir que o código seja simples, claro e fácil de verificar.
multica-ai/andrej-karpathy-skills
skill-creator
Permite ao agente criar, modificar e otimizar habilidades. Útil para testar o desempenho de habilidades e melhorar sua precisão.
anthropics/skills
ponytail-debt
Lista todos os atalhos de código ('shortcut:') deixados para depois. Ajuda a ver o que ainda precisa ser corrigido no projeto.
DietrichGebert/ponytail