About This eBook
Effective Python
Praise for Effective Python
Contents
Preface
What This Book Covers
Chapter 1: Pythonic Thinking
Chapter 2: Functions
Chapter 3: Classes and Inheritance
Chapter 4: Metaclasses and Attributes
Chapter 5: Concurrency and Parallelism
Chapter 6: Built-in Modules
Chapter 7: Collaboration
Chapter 8: Production
Conventions Used in This Book
Where to Get the Code and Errata
Acknowledgments
About the Author
1. Pythonic Thinking
Item 1: Know Which Version of Python You’re Using
Things to Remember
Item 2: Follow the PEP 8 Style Guide
Things to Remember
Item 3: Know the Differences Between bytes, str, and unicode
Things to Remember
Item 4: Write Helper Functions Instead of Complex Expressions
Things to Remember
Item 5: Know How to Slice Sequences
Things to Remember
Item 6: Avoid Using start, end, and stride in a Single Slice
Things to Remember
Item 7: Use List Comprehensions Instead of map and filter
Things to Remember
Item 8: Avoid More Than Two Expressions in List Comprehensions
Things to Remember
Item 9: Consider Generator Expressions for Large Comprehensions
Things to Remember
Item 10: Prefer enumerate Over range
Things to Remember
Item 11: Use zip to Process Iterators in Parallel
Things to Remember
Item 12: Avoid else Blocks After for and while Loops
Things to Remember
Item 13: Take Advantage of Each Block in try/except/else/finally
Finally Blocks
Else Blocks
Everything Together
Things to Remember
2. Functions
Item 14: Prefer Exceptions to Returning None
Things to Remember
Item 15: Know How Closures Interact with Variable Scope
Getting Data Out
Scope in Python 2
Things to Remember
Item 16: Consider Generators Instead of Returning Lists
Things to Remember
Item 17: Be Defensive When Iterating Over Arguments
Things to Remember
Item 18: Reduce Visual Noise with Variable Positional Arguments
Things to Remember
Item 19: Provide Optional Behavior with Keyword Arguments
Things to Remember
Item 20: Use None and Docstrings to Specify Dynamic Default Arguments
Things to Remember
Item 21: Enforce Clarity with Keyword-Only Arguments
Keyword-Only Arguments in Python 2
Things to Remember
3. Classes and Inheritance
Item 22: Prefer Helper Classes Over Bookkeeping with Dictionaries and Tuples
Refactoring to Classes
Things to Remember
Item 23: Accept Functions for Simple Interfaces Instead of Classes
Things to Remember
Item 24: Use @classmethod Polymorphism to Construct Objects Generically
Things to Remember
Item 25: Initialize Parent Classes with super
Things to Remember
Item 26: Use Multiple Inheritance Only for Mix-in Utility Classes
Things to Remember
Item 27: Prefer Public Attributes Over Private Ones
Things to Remember
Item 28: Inherit from collections.abc for Custom Container Types
Things to Remember
4. Metaclasses and Attributes
Item 29: Use Plain Attributes Instead of Get and Set Methods
Things to Remember
Item 30: Consider @property Instead of Refactoring Attributes
Things to Remember
Item 31: Use Descriptors for Reusable @property Methods
Things to Remember
Item 32: Use __getattr__, __getattribute__, and __setattr__ for Lazy Attributes
Things to Remember
Item 33: Validate Subclasses with Metaclasses
Things to Remember
Item 34: Register Class Existence with Metaclasses
Things to Remember
Item 35: Annotate Class Attributes with Metaclasses
Things to Remember
5. Concurrency and Parallelism
Item 36: Use subprocess to Manage Child Processes
Things to Remember
Item 37: Use Threads for Blocking I/O, Avoid for Parallelism
Things to Remember
Item 38: Use Lock to Prevent Data Races in Threads
Things to Remember
Item 39: Use Queue to Coordinate Work Between Threads
Queue to the Rescue
Things to Remember
Item 40: Consider Coroutines to Run Many Functions Concurrently
The Game of Life
Coroutines in Python 2
Things to Remember
Item 41: Consider concurrent.futures for True Parallelism
Things to Remember
6. Built-in Modules
Item 42: Define Function Decorators with functools.wraps
Things to Remember
Item 43: Consider contextlib and with Statements for Reusable try/finally Behavior
Using with Targets
Things to Remember
Item 44: Make pickle Reliable with copyreg
Default Attribute Values
Versioning Classes
Stable Import Paths
Things to Remember
Item 45: Use datetime Instead of time for Local Clocks
The time Module
The datetime Module
Things to Remember
Item 46: Use Built-in Algorithms and Data Structures
Double-ended Queue
Ordered Dictionary
Default Dictionary
Heap Queue
Bisection
Iterator Tools
Things to Remember
Item 47: Use decimal When Precision Is Paramount
Things to Remember
Item 48: Know Where to Find Community-Built Modules
Things to Remember
7. Collaboration
Item 49: Write Docstrings for Every Function, Class, and Module
Documenting Modules
Documenting Classes
Documenting Functions
Things to Remember
Item 50: Use Packages to Organize Modules and Provide Stable APIs
Namespaces
Stable APIs
Things to Remember
Item 51: Define a Root Exception to Insulate Callers from APIs
Things to Remember
Item 52: Know How to Break Circular Dependencies
Reordering Imports
Import, Configure, Run
Dynamic Import
Things to Remember
Item 53: Use Virtual Environments for Isolated and Reproducible Dependencies
The pyvenv Command
Reproducing Dependencies
Things to Remember
8. Production
Item 54: Consider Module-Scoped Code to Configure Deployment Environments
Things to Remember
Item 55: Use repr Strings for Debugging Output
Things to Remember
Item 56: Test Everything with unittest
Things to Remember
Item 57: Consider Interactive Debugging with pdb
Things to Remember
Item 58: Profile Before Optimizing
Things to Remember
Item 59: Use tracemalloc to Understand Memory Usage and Leaks
Things to Remember
Index
Symbols
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
Y
Z
Code Snippets