Domain papers distilled from python-numbers-everyone-should-know: - async-overhead: 1,400x sync vs async overhead - collection-membership: 200x set vs list at 1000 items - json-serialization: 8x orjson vs stdlib - exception-flow: 6.5x exception overhead (try/except free) - string-formatting: f-strings > % > .format() - memory-slots: 69% memory reduction with __slots__ - import-optimization: 100ms+ for heavy packages - database-patterns: 98% commit overhead in SQLite RULEBOOK.md: ~200 token distillation for coding subagents 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
33 lines
1.1 KiB
Markdown
33 lines
1.1 KiB
Markdown
# RULEBOOK: Python Performance
|
|
|
|
**Load into coding subagents. ~200 tokens. See `/papers/*.md` for deep dives.**
|
|
|
|
## The Numbers
|
|
- Async overhead: **1,400x** (sync 20ns, async 28us)
|
|
- Set vs list membership: **200x** at 1000 items
|
|
- orjson vs stdlib json: **8x** faster
|
|
- Exception raise: **6.5x** (try/except is free)
|
|
- SQLite commit: **98%** of write latency
|
|
|
|
## Rules
|
|
|
|
**Collections**: Default to `set` for membership. Use `dict.get()` not check-then-access.
|
|
|
|
**Async**: Default sync. Only async for I/O >1ms. Use `gather()` not loops.
|
|
|
|
**JSON**: Default `orjson`. stdlib only for zero-deps requirement.
|
|
|
|
**Exceptions**: try/except is free. Use `.get()` for dicts. EAFP for <15% failure rate.
|
|
|
|
**Strings**: f-strings default. `%` for logging (deferred eval). `join()` for many parts.
|
|
|
|
**Memory**: `@dataclass(slots=True)` for 100+ instances.
|
|
|
|
**Imports**: `TYPE_CHECKING` for heavy types. Lazy imports in CLI tools.
|
|
|
|
**Database**: DiskCache for key-value. Batch SQLite writes. Reads cheap, writes expensive.
|
|
|
|
---
|
|
|
|
*Source: python-numbers-everyone-should-know (Python 3.14.2, Apple Silicon)*
|