Table of Contents
- Getting Started – One Environment per Project
- Interactive Python Interpreters
- Pythonic Syntax and Common Pitfalls
- Pythonic Design Patterns
- Functional Programming – Readability Versus Brevity
- Decorators – Enabling Code Reuse by Decorating
- Generators and Coroutines – Infinity, One Step at a Time
- Metaclasses – Making Classes (Not Instances) Smarter
- Documentation – How to Use Sphinx and reStructuredText
- Testing and Logging – Preparing for Bugs
- Debugging – Solving the Bugs
- Performance – Tracking and Reducing Your Memory and CPU Usage
- asyncio – Multithreading without Threads
- Multiprocessing – When a Single CPU Core Is Not Enough
- Scientific Python and Plotting
- Artificial Intelligence
- Extensions in C/C++, System Calls, and C/C++ Libraries
- Packaging – Creating Your Own Libraries or Applications

