CYAN
MAGENTA
YELLOW
BLACK
PANTONE 123 C
BOOKS FOR PROFESSIONALS BY PROFESSIONALS ®
Marty Alchin, Author of
Pro Django
THE EXPERT’S VOICE ® IN OPEN SOURCE
Companion
eBook Available
Dear Reader,
In these pages, you’ll learn about
• Metaprogramming
• Duck typing
• Operator overloading
• Descriptors
• Decorators
• Metaclasses
• A whole bunch of other advanced topics!
There are plenty of examples along the way, so you won’t have to imagine
how they apply to the real world. In fact, you’ll build an entire framework from
scratch by the end of the book.
In addition to tools and techniques, you’ll learn about the philosophy
behind Python and some best practices that will help you write code that’s
clean, readable and maintainable. Some are accepted norms across multiple
languages, while others are unique to Python. You’ll learn not only how to write
powerful code but also how to think about your code, so you can take advantage of everything Python and its community have to offer.
You don’t need to be a pro to read this book, but you’ll be ready to go pro
when you’re done.
Python
Have you ever wondered what makes your favorite Python library or framework
tick? Finding out can seem like a daunting task, but it doesn’t have to be. Python
is a simple, elegant language, and even at its most complex, it still maintains
a high degree of consistency that can help you find your way. All you need is a
guide to help you follow along. Pro Python is that guide.
Pro
Pro Python
Pro
Python
Advanced coding techniques and tools
Marty Alchin
Companion eBook
THE APRESS ROADMAP
Beginning Python,
Second Edition
See last page for details
on $10 eBook version
Foundations of Agile
Python Development
Python 3
for Absolute Beginners
Dive into
Python 3
Pro Python
Beginning
Python Visualization
www.apress.com
ISBN 978-1-4302-2757-1
5 49 9 9
US $49.99
Alchin
SOURCE CODE ONLINE
Marty Alchin
Shelve in:
Python
User level:
Intermediate-Advanced
9 7814
30 227571
www.it-ebooks.info
this print for content only—size & color not accurate
7.5 x 9.25 spine = 0.8125" 362 page count
www.it-ebooks.info
Pro Python
Marty Alchin
www.it-ebooks.info
Pro Python
Copyright © 2010 by Marty Alchin
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner and the publisher.
ISBN-13 (pbk): 978-1-4302-2757-1
ISBN-13 (electronic): 978-1-4302-2758-8
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
President and Publisher: Paul Manning
Lead Editors: Duncan Parkes, Tom Welsh
Technical Reviewer: George Vilches
Editorial Board: Clay Andres, Steve Anglin, Mark Beckner, Ewan Buckingham, Gary Cornell, Jonathan
Gennick, Jonathan Hassell, Michelle Lowman, Matthew Moodie, Duncan Parkes, Jeffrey Pepper,
Frank Pohlmann, Douglas Pundick, Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom
Welsh
Coordinating Editor: Mary Tobin
Copy Editors: Nancy Sixsmith, Angel Alchin
Compositor: Bytheway Publishing Services
Indexer: John Collin
Cover Designer: Anna Ishchenko
Distributed to the book trade worldwide by Springer Science+Business Media, LLC., 233 Spring Street, 6th
Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail
[email protected], or visit www.springeronline.com.
For information on translations, please e-mail
[email protected], or visit www.apress.com.
Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use.
eBook versions and licenses are also available for most titles. For more information, reference our Special
Bulk Sales–eBook Licensing web page at www.apress.com/info/bulksales.
The information in this book is distributed on an “as is” basis, without warranty. Although every precaution
has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to
any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly
by the information contained in this work.
The source code for this book is available to readers at www.apress.com. You will need to answer questions
pertaining to this book in order to successfully download the code.
www.it-ebooks.info
CONTENTS
Contents at a Glance
Contents................................................................................................................. iv
About the Author.................................................................................................. xvi
About the Technical Reviewer ............................................................................ xvii
Acknowledgments ............................................................................................. xviii
Introduction ......................................................................................................... xix
Chapter 1: Principles and Philosophy.....................................................................1
Chapter 2: Advanced Basics .................................................................................19
Chapter 3: Functions.............................................................................................53
Chapter 4: Classes ..............................................................................................103
Chapter 5: Common Protocols ............................................................................143
Chapter 6: Object Management ..........................................................................169
Chapter 7: Strings...............................................................................................191
Chapter 8: Documentation ..................................................................................207
Chapter 9: Testing...............................................................................................217
Chapter 10: Distribution .....................................................................................233
Chapter 11: Sheets: A CSV Framework...............................................................243
PEP 8: Style Guide for Python .............................................................................283
PEP 10: Voting Guidelines...................................................................................299
PEP 20: The Zen of Python ..................................................................................301
PEP 257: Docstring Conventions.........................................................................303
PEP 387: Backwards Compatibility Policy..........................................................309
PEP 3000: Python 3000 ......................................................................................313
PEP 3003: Python Language Moratorium ...........................................................317
Index ...................................................................................................................321
iii
www.it-ebooks.info
CONTENTS
Contents
Contents................................................................................................................. iv
About the Author.................................................................................................. xvi
About the Technical Reviewer ............................................................................ xvii
Acknowledgments ............................................................................................. xviii
Introduction ......................................................................................................... xix
Chapter 1: Principles and Philosophy.....................................................................1
The Zen of Python..............................................................................................................1
Beautiful Is Better Than Ugly .................................................................................................................... 2
Explicit Is Better Than Implicit.................................................................................................................. 2
Simple Is Better Than Complex ................................................................................................................ 3
Complex Is Better Than Complicated........................................................................................................ 3
Flat Is Better Than Nested ........................................................................................................................ 4
Sparse Is Better Than Dense .................................................................................................................... 5
Readability Counts.................................................................................................................................... 5
Special Cases Aren’t Special Enough to Break the Rules......................................................................... 6
Although Practicality Beats Purity ............................................................................................................ 6
Errors Should Never Pass Silently ............................................................................................................ 7
Unless Explicitly Silenced......................................................................................................................... 8
In the Face of Ambiguity, Refuse the Temptation to Guess...................................................................... 9
There Should Be One—and Preferably Only One— Obvious Way to Do It ............................................. 10
Although That Way May Not Be Obvious at First Unless You’re Dutch ................................................... 10
Now Is Better Than Never....................................................................................................................... 11
iv
www.it-ebooks.info
CONTENTS
Although Never Is Often Better Than Right Now..................................................................................... 11
If the Implementation is Hard to Explain, It’s a Bad Idea........................................................................ 11
If the Implementation is Easy to Explain, It May Be a Good Idea............................................................ 11
Namespaces Are One Honking Great Idea— Let’s Do More of Those!................................................... 12
Don’t Repeat Yourself ......................................................................................................12
Loose Coupling ................................................................................................................13
The Samurai Principle......................................................................................................13
The Pareto Principle.........................................................................................................14
The Robustness Principle ................................................................................................14
Backward Compatibility...................................................................................................15
The Road to Python 3.0....................................................................................................16
Taking It With You............................................................................................................17
Chapter 2: Advanced Basics .................................................................................19
General Concepts.............................................................................................................19
Iteration .................................................................................................................................................. 19
Caching................................................................................................................................................... 20
Transparency.......................................................................................................................................... 21
Control Flow.....................................................................................................................21
Catching Exceptions ............................................................................................................................... 21
Exception Chains .................................................................................................................................... 24
When Everything Goes Right .................................................................................................................. 26
Proceeding Regardless of Exceptions .................................................................................................... 27
Optimizing Loops .................................................................................................................................... 29
The with Statement ................................................................................................................................ 29
Conditional Expressions ......................................................................................................................... 31
Iteration ...........................................................................................................................33
Sequence Unpacking.............................................................................................................................. 34
List Comprehensions .............................................................................................................................. 35
v
www.it-ebooks.info
CONTENTS
Generator Expressions............................................................................................................................ 36
Set Comprehensions............................................................................................................................... 37
Dictionary Comprehensions.................................................................................................................... 37
Chaining Iterables Together ................................................................................................................... 38
Zipping Iterables Together...................................................................................................................... 38
Collections .......................................................................................................................39
Sets ........................................................................................................................................................ 39
Named Tuples......................................................................................................................................... 43
Ordered Dictionaries............................................................................................................................... 44
Dictionaries with Defaults ...................................................................................................................... 44
Importing Code ................................................................................................................45
Fallback Imports..................................................................................................................................... 45
Importing from the Future ...................................................................................................................... 46
Using __all__ to Customize Imports....................................................................................................... 47
Relative Imports...................................................................................................................................... 48
The __import__() function...................................................................................................................... 49
The importlib module.............................................................................................................................. 51
Taking It With You............................................................................................................52
Chapter 3: Functions.............................................................................................53
Arguments .......................................................................................................................53
Planning for Flexibility ............................................................................................................................ 54
Variable Positional Arguments................................................................................................................ 54
Variable Keyword Arguments ................................................................................................................. 55
Combining Different Kinds of Arguments ............................................................................................... 56
Invoking Functions with Variable Arguments ......................................................................................... 59
Preloading Arguments ............................................................................................................................ 60
Introspection........................................................................................................................................... 61
Example: Identifying Argument Values................................................................................................... 62
Example: A More Concise Version .......................................................................................................... 64
vi
www.it-ebooks.info
CONTENTS
Example: Validating Arguments.............................................................................................................. 66
Decorators .......................................................................................................................67
Closures.................................................................................................................................................. 69
Wrappers ................................................................................................................................................ 71
Decorators with Arguments.................................................................................................................... 72
Decorators with—or without—Arguments ............................................................................................ 74
Example: Memoization ........................................................................................................................... 75
Example: A Decorator to Create Decorators ........................................................................................... 77
Function Annotations.......................................................................................................78
Example: Type Safety ............................................................................................................................. 79
Factoring Out the Boilerplate.................................................................................................................. 86
Example: Type Coercion ......................................................................................................................... 88
Annotating with Decorators.................................................................................................................... 90
Example: Type Safety as a Decorator..................................................................................................... 90
Generators .......................................................................................................................94
Lambdas ..........................................................................................................................96
Introspection....................................................................................................................97
Identifying Object Types ......................................................................................................................... 98
Modules and Packages........................................................................................................................... 98
Docstrings .............................................................................................................................................. 99
Taking It With You..........................................................................................................101
Chapter 4: Classes ..............................................................................................103
Inheritance.....................................................................................................................103
Multiple Inheritance.............................................................................................................................. 105
Method Resolution Order (MRO) ........................................................................................................... 106
Example: C3 Algorithm ......................................................................................................................... 109
Using super() to Pass Control to Other Classes .................................................................................... 115
Introspection......................................................................................................................................... 117
vii
www.it-ebooks.info
CONTENTS
How Classes Are Created ..............................................................................................119
Creating Classes at Runtime ................................................................................................................ 120
Metaclasses.......................................................................................................................................... 121
Example: Plugin Framework................................................................................................................. 122
Controlling the Namespace .................................................................................................................. 125
Attributes .......................................................................................................................126
Properties ............................................................................................................................................. 127
Descriptors ........................................................................................................................................... 129
Methods.........................................................................................................................131
Unbound Methods................................................................................................................................. 131
Bound Methods..................................................................................................................................... 132
Class Methods ...................................................................................................................................... 133
Static Methods...................................................................................................................................... 134
Assigning Functions to Classes and Instances..................................................................................... 135
Magic Methods ..............................................................................................................135
Creating Instances................................................................................................................................ 136
Example: Automatic Subclasses........................................................................................................... 137
Dealing with Attributes ......................................................................................................................... 138
String Representations ......................................................................................................................... 140
Taking It With You..........................................................................................................142
Chapter 5: Common Protocols ............................................................................143
Basic Operations............................................................................................................143
Mathematical Operations ..................................................................................................................... 144
Bitwise Operations ............................................................................................................................... 148
Variations.............................................................................................................................................. 150
Numbers ........................................................................................................................152
Sign Operations .................................................................................................................................... 154
Comparison Operations ........................................................................................................................ 154
viii
www.it-ebooks.info
CONTENTS
Iterables.........................................................................................................................155
Example: Repeatable Generators ......................................................................................................... 158
Sequences .....................................................................................................................159
Mappings .......................................................................................................................164
Callables ........................................................................................................................165
Context Managers..........................................................................................................166
Taking It With You..........................................................................................................168
Chapter 6: Object Management ..........................................................................169
Namespace Dictionary...................................................................................................170
Example: Borg Pattern.......................................................................................................................... 170
Example: Self-caching properties ........................................................................................................ 173
Garbage Collection.........................................................................................................176
Reference Counting .............................................................................................................................. 177
Cyclical References .............................................................................................................................. 178
Weak References.................................................................................................................................. 180
Pickling ..........................................................................................................................182
Copying..........................................................................................................................186
Shallow Copies ..................................................................................................................................... 187
Deep Copies.......................................................................................................................................... 188
Taking It With You..........................................................................................................190
Chapter 7: Strings...............................................................................................191
Bytes..............................................................................................................................191
Simple Conversion: chr() and ord() ....................................................................................................... 192
Complex Conversion: The Struct Module.............................................................................................. 193
Text................................................................................................................................195
Unicode................................................................................................................................................. 196
Encodings ............................................................................................................................................. 196
ix
www.it-ebooks.info
CONTENTS
Simple Substitution .......................................................................................................198
Formatting .....................................................................................................................201
Looking Up Values Within Objects ........................................................................................................ 202
Distinguishing Types of Strings............................................................................................................ 202
Standard Format Specification ............................................................................................................. 203
Example: Plain Text Table of Contents ................................................................................................. 204
Custom Format Specification ............................................................................................................... 205
Taking It With You..........................................................................................................206
Chapter 8: Documentation ..................................................................................207
Proper Naming...............................................................................................................207
Comments......................................................................................................................208
Docstrings......................................................................................................................208
Describe What the Function Does ........................................................................................................ 209
Explain the Arguments ......................................................................................................................... 209
Don’t Forget the Return Value .............................................................................................................. 209
Include Any Expected Exceptions......................................................................................................... 210
Documentation Outside the Code ..................................................................................210
Installation and Configuration............................................................................................................... 210
Tutorials................................................................................................................................................ 210
Reference Documents .......................................................................................................................... 210
Documentation Utilities .................................................................................................211
Formatting ............................................................................................................................................ 212
Links ..................................................................................................................................................... 213
Sphinx................................................................................................................................................... 214
Taking It With You..........................................................................................................215
Chapter 9: Testing...............................................................................................217
Test-Driven Development (TDD) ....................................................................................217
Doctests.........................................................................................................................218
x
www.it-ebooks.info
CONTENTS
Formatting Code ................................................................................................................................... 218
Representing Output............................................................................................................................. 218
Integrating With Documentation........................................................................................................... 219
Running Tests....................................................................................................................................... 220
The unittest module.......................................................................................................221
Setting Up............................................................................................................................................. 221
Writing Tests......................................................................................................................................... 222
Other Comparisons ............................................................................................................................... 226
Testing Strings and Other Sequence Content....................................................................................... 226
Testing Exceptions ............................................................................................................................... 227
Testing Identity ..................................................................................................................................... 229
Tearing Down ....................................................................................................................................... 229
Providing a Custom Test Class ......................................................................................230
Changing Test Behavior........................................................................................................................ 230
Taking It With You..........................................................................................................231
Chapter 10: Distribution .....................................................................................233
Licensing .......................................................................................................................233
GNU General Public License (GPL) ........................................................................................................ 233
Affero General Public License (AGPL) ................................................................................................... 234
GNU Lesser General Public License (LGPL)........................................................................................... 235
Berkeley Software Distribution (BSD) License...................................................................................... 235
Other Licenses...................................................................................................................................... 236
Packaging ......................................................................................................................236
setup.py................................................................................................................................................ 237
MANIFEST.in ......................................................................................................................................... 239
The sdist command .............................................................................................................................. 240
Distribution ....................................................................................................................241
Taking It With You..........................................................................................................242
xi
www.it-ebooks.info
CONTENTS
Chapter 11: Sheets: A CSV Framework...............................................................243
Building a Declarative Framework.................................................................................244
Introducing Declarative Programming.................................................................................................. 244
To Build or Not to Build?....................................................................................................................... 245
Building the Framework ................................................................................................246
Managing Options................................................................................................................................. 247
Defining Fields...................................................................................................................................... 249
Attaching a Field to a Class .................................................................................................................. 250
Adding a Metaclass .............................................................................................................................. 252
Bringing It Together.............................................................................................................................. 255
Ordering Fields ..............................................................................................................256
DeclarativeMeta.__prepare__()............................................................................................................ 256
Column.__init__()................................................................................................................................. 258
Column.__new__() ............................................................................................................................... 262
CounterMeta.__call__()........................................................................................................................ 263
Choosing an Option............................................................................................................................... 264
Building a Field Library..................................................................................................264
StringField ............................................................................................................................................ 265
IntegerColumn ...................................................................................................................................... 266
FloatColumn.......................................................................................................................................... 266
DecimalColumn .................................................................................................................................... 266
DateColumn .......................................................................................................................................... 267
Getting Back to CSV.......................................................................................................271
Checking Arguments ............................................................................................................................ 272
Populating Values ................................................................................................................................. 274
The Reader ........................................................................................................................................... 276
The Writer............................................................................................................................................. 280
Taking It With You..........................................................................................................282
xii
www.it-ebooks.info
CONTENTS
PEP 8: Style Guide for Python .............................................................................283
Introduction ...................................................................................................................283
A Foolish Consistency is the Hobgoblin of Little Minds .................................................283
Code Layout ...................................................................................................................284
Indentation............................................................................................................................................ 284
Tabs or Spaces? ................................................................................................................................... 284
Maximum Line Length .......................................................................................................................... 284
Blank Lines ........................................................................................................................................... 284
Encodings (PEP 263)............................................................................................................................. 285
Imports ..........................................................................................................................285
Whitespace in Expressions and Statements..................................................................286
Pet Peeves............................................................................................................................................ 286
Other Recommendations ...................................................................................................................... 287
Comments......................................................................................................................288
Block Comments................................................................................................................................... 289
Inline Comments................................................................................................................................... 289
Documentation Strings ..................................................................................................289
Version Bookkeeping .....................................................................................................290
Naming Conventions......................................................................................................290
Descriptive: Naming Styles................................................................................................................... 290
Prescriptive: Naming Conventions........................................................................................................ 291
Programming Recommendations ..................................................................................294
Copyright .......................................................................................................................297
PEP 10: Voting Guidelines...................................................................................299
Abstract .........................................................................................................................299
Rationale........................................................................................................................299
Voting Scores.................................................................................................................299
xiii
www.it-ebooks.info
CONTENTS
Copyright .......................................................................................................................300
PEP 20: The Zen of Python ..................................................................................301
Abstract .........................................................................................................................301
The Zen of Python..........................................................................................................301
Easter Egg......................................................................................................................301
Copyright .......................................................................................................................302
PEP 257: Docstring Conventions.........................................................................303
Abstract .........................................................................................................................303
Rationale........................................................................................................................303
Specification..................................................................................................................303
What is a Docstring?............................................................................................................................. 303
One-Line Docstrings ............................................................................................................................. 304
Multi-Line Docstrings ........................................................................................................................... 305
Handling Docstring Indentation ............................................................................................................ 306
Copyright .......................................................................................................................307
Acknowledgments .........................................................................................................307
PEP 387: Backwards Compatibility Policy..........................................................309
Abstract .........................................................................................................................309
Rationale........................................................................................................................309
Backwards Compatibility Rules .....................................................................................309
Making Incompatible Changes ......................................................................................310
Copyright .......................................................................................................................311
PEP 3000: Python 3000 ......................................................................................313
Abstract .........................................................................................................................313
Naming ..........................................................................................................................313
PEP Numbering..............................................................................................................313
xiv
www.it-ebooks.info
CONTENTS
Timeline .........................................................................................................................313
Compatibility and Transition ..........................................................................................314
Implementation Language .............................................................................................315
Meta-Contributions........................................................................................................315
Copyright .......................................................................................................................315
PEP 3003: Python Language Moratorium ...........................................................317
Abstract .........................................................................................................................317
Rationale........................................................................................................................317
Details............................................................................................................................318
Cannot Change ..................................................................................................................................... 318
Case-by-Case Exemptions.................................................................................................................... 318
Allowed to Change................................................................................................................................ 318
Retroactive.....................................................................................................................319
Extensions .....................................................................................................................319
Copyright .......................................................................................................................319
Index ...................................................................................................................321
xv
www.it-ebooks.info
About the Author
Marty Alchin is a professional programmer with a passion for the Web. His work with Django, the
popular Web framework, led him to write several articles about Python, to speak at PyCon and even to
write his first book, Pro Django, which was published by Apress in December of 2008.
In addition to writing for print, Marty keeps a blog at http://martyalchin.com/, where he writes
about Python, Django and anything else that strikes his fancy.
xvi
www.it-ebooks.info
About the Technical Reviewer
George Vilches is a software engineer and systems administrator
with an unabashed fondness for Python and the Web in both
disciplines. In the last three years, he has made several contributions
to Django, with a focus on the ORM and administrative side of things.
He is a principal engineer with AOL and builds Django applications
with Fortune Cookie Studios (http://fcstudios.com).
George’s personal time is split between tinkering with open source
projects and enjoying the company of his wife Kate, their corgi and
their two cats (all of whom would prefer he stop tinkering and attend
to them more).
xvii
www.it-ebooks.info
INTRODUCTION
Acknowledgments
I wouldn’t have even started this project if not for the endless encouragement from my lovely wife,
Angel. She’s been my sounding board, my task manager, my copy editor and my own personal
cheerleader. There’s no way I could do anything like this without her help and support.
I’d also like to thank my technical reviewer, George, for everything he’s done to help me out. He’s
gone above and beyond the limits of his role, helping with everything from code to grammar and even a
good bit of style. After enjoying his help on Pro Django, I wouldn’t have even signed on for another book
without him by my side.
Lastly, I never would’ve considered a book like this if not for the wonderful community around
Python. The willingness of Python programmers to open their minds and their code is, I believe,
unrivaled among our peers. It’s this spirit of openness that encourages me every day, leading me to
discover new things and push myself beyond the limits of what I knew yesterday.
We learn by doing and by seeing what others have done. I hope that you’ll take the contents of this
book and do more with it than what I’ve done. There’s no better reward for all this hard work than to see
better programmers writing better code.
xviii
www.it-ebooks.info