[January 2011] The following are written replies to questions posed by O'Reilly Media, the publisher, about this book's scope, audience, and goals. For more about this book, see also the early draft excerpt from the book's Preface.
The prior edition was written in 2006 under Python 2.5. It was very much in need of an update, both for Python 3.X and its libraries, and for recent evolution in Python tools and techniques. The new edition better reflects the "best practice" of today's Python world.
By applying the Python 3.X language, it aims to lead the curve on 3.X adoption in general, and be relevant for years to come.
My other book, Learning Python 4th Edition, published a year ago, takes a more egalitarian and even agnostic approach. It covers both the 2.X and 3.X Python lines. Specifically, it stresses 3.X, but describes 2.X difference along the way, so that it's content is relevant to both. As such, it reflects and addresses the reality of the Python world today, which is still largely split between the two Pythons.
By contrast, Programming Python really had to choose one Python or the other, because much of its content lies in larger examples which can only be listed in one form. Although it's possible to write programs that run on both 2.X and 3.X, this requires a lowest common denominator approach which sacrifices some of the best tools and practice of both lines, and yields code which is overly and unnecessarily complex. By choosing to go with Python 3.X only, and in the process showing that 3.X is a valid system development tool, this book hopes to encourage Python 3.X adoption in the Python world.
Of course, it remains to be seen whether the 2.X ecosystem is too large and entrenched to tolerate the changes that 3.X implies, but most of us believe that 3.X will either come to dominate, or at least offer a valid and vibrant alternative going forward. Moreover, 3.X is not that much different from 2.X to make this an absolute one-or-the-other choice; Python 2.X users will probably still get a lot out of this book, even if a few of their language and library details may vary.
They'll be able to apply Python to realistic and practical programming tasks.
This is an applications programming book which provides tutorials that teach common Python application domains from the ground up. Readers learn the fundamentals of GUIs, the Internet, databases, text processing, and more. Along the way, they also see how to best apply the Python language, as well as its libraries, tools, and idioms in such domains.
Although this book develops large-scale programs, its general focus is on application fundamentals that span domains, rather than current "hot topics." You won't find tersely documented examples of things like Django or Android, for instance, which may whet reader's appetites, but teach little of lasting value. Instead, readers of this book will gain a deep understanding of the domains it covers, which should apply equally well to the transient bleeding edge.
People who have already studied the fundamentals of the Python language, and wish to move on to learn how to apply it to real-world tasks and full-scale development. It's especially intended as a follow-up book for Learning Python readers.
This book tells the other half of the Python story -- what you can do with the language after you've mastered it. As such, it is explicitly designed to work as the second in a two-volume set: as a follow-up to the language fundamentals book Learning Python. That book covers the language by itself, and this book moves on to show its application in larger and more complete example programs.
To some extent, this book is also intended for people who want to learn what full-scale software development is like. The scope of this book allows it to present larger examples than most (some of which span thousands of lines of code and multiple chapters), which illustrate facets of programming that smaller examples cannot.
Given that Python 3.X is expected to be the future of Python (or at the very least a major part of it), an in-depth applications programming book that uses Python 3.X exclusively should serve as a resource for both new Python users who start off with Python 3.X initially, as well as current Python 2.X users migrating to 3.X over time.
Python 3.X will probably matter to everyone using Python eventually, even if it's just as a candidate being evaluated for viability. By showing Python 3.X put to work on realistic tasks, this book should help readers judge its merits, and perhaps apply it for tasks of their own.