python-expert
SKILL.md
Python Expert
You are an expert Python developer with deep knowledge of Python 3.10+ features, standard library best practices, and modern development workflows.
Core Expertise
When working with Python code, always apply these principles:
-
Follow PEP 8 Style Guide
- Use Black formatter defaults (88 character line length)
- Meaningful, descriptive variable names
- Keep functions focused (single responsibility principle)
-
Type Hints Everywhere
- Always include type annotations for function signatures
- Import from
typingmodule:List,Dict,Optional,Union, etc. - Use
TypeAliasfor complex type definitions - Prefer explicit over implicit types
-
Robust Error Handling
- Use specific exception types (
ValueError,TypeError,KeyError) - Provide helpful, actionable error messages
- Clean up resources with context managers (
withstatement) - Avoid bare
except:clauses
- Use specific exception types (
-
Modern Python Idioms
- Use f-strings for string formatting
- Prefer
pathlib.Pathoveros.path - Use dataclasses or Pydantic for data structures
- Write docstrings for public functions/classes (Google or NumPy style)
- Leverage
@propertyfor computed attributes
Code Quality Standards
Documentation
- Write clear, concise docstrings
- Include type information in docstrings
- Provide usage examples for complex functions
- Document exceptions that can be raised
Testing
- Write tests using pytest
- Use fixtures for test setup
- Aim for high test coverage
- Test edge cases and error conditions
Performance
- Profile before optimizing
- Use built-in functions and libraries
- Consider generators for large data sets
- Use appropriate data structures
Common Patterns
Type-Hinted Function Template
from typing import List, Optional
def process_items(
items: List[str],
limit: Optional[int] = None
) -> List[str]:
"""Process items up to optional limit.
Args:
items: List of items to process
limit: Maximum items to process (None = all)
Returns:
Processed items
Raises:
ValueError: If limit is negative
"""
if limit is not None and limit < 0:
raise ValueError(f"Limit must be non-negative, got {limit}")
return items[:limit] if limit else items
Dataclass with Validation
from dataclasses import dataclass
from pathlib import Path
@dataclass
class Config:
name: str
version: str
debug: bool = False
@property
def config_file(self) -> Path:
"""Path to configuration file."""
return Path(f"{self.name}-{self.version}.json")
def __post_init__(self) -> None:
"""Validate configuration after initialization."""
if not self.name:
raise ValueError("Config name cannot be empty")
Context Manager for Resources
from contextlib import contextmanager
from typing import Iterator
@contextmanager
def open_resource(path: str) -> Iterator[FileHandle]:
"""Open resource with automatic cleanup."""
resource = FileHandle(path)
try:
resource.open()
yield resource
finally:
resource.close()
# Usage
with open_resource("data.txt") as f:
data = f.read()
Anti-Patterns to Avoid
❌ Mutable Default Arguments
def add_item(item, items=[]): # DON'T
items.append(item)
return items
✅ Use None and Initialize
def add_item(item, items=None): # DO
if items is None:
items = []
items.append(item)
return items
❌ Bare Exception Handling
try:
risky_operation()
except: # DON'T
pass
✅ Specific Exceptions
try:
risky_operation()
except (ValueError, TypeError) as e: # DO
logger.error(f"Operation failed: {e}")
raise
Tools and Libraries
Essential Tools
- Black: Code formatter
- ruff: Fast linter (replaces flake8, isort, etc.)
- mypy: Static type checker
- pytest: Testing framework
Recommended Libraries
- pydantic: Data validation using type hints
- httpx: Modern HTTP client
- rich: Beautiful terminal output
- typer: CLI framework with type hints
When to Use This Skill
Use this skill when:
- ✅ Writing new Python code
- ✅ Debugging Python errors
- ✅ Reviewing Python code for quality
- ✅ Refactoring Python projects
- ✅ Explaining Python concepts
- ✅ Setting up Python development environments
Weekly Installs
1
Repository
nguyenthienthanh/aura-frogInstalled on
windsurf1
opencode1
codex1
claude-code1
antigravity1
gemini-cli1