Author: Mark Lutz
Aimed at: Intermediate level developers
Reviewed by: Mike James
This is the fifth edition of a well known book on Python. It is a huge volume and has grown bigger in this new edition.
This can only be described as an encyclopedia of a book and in many ways you can consider it to be an encyclopedic look at Python. The big problem is that people generally don't sit down and curl up with a nice encyclopedia and so it is with this book. Its size is just intimidating and makes you think - do I really need 1600 pages to learn Python?
I really doubt that anyone is going to read this book from the first page to the last and I have to admit that I most certainly haven't. I have read large chunks of it, though, and it is very useful for looking up particular Python topics when the need arises.
The book is divided into nine sections including appendixes. When reading it you can't help but think that it might have been better issued as a boxed set of nine or so smaller volumes. You can't even get away from its size if you read it in ebook form as it is still not a body of work that you would want to read from start to finish.
Part I of the book, some 80 pages long, gets you started with Python - installation and your first program. It is here you first realize that this book is not for the beginner and it certainly isn't about learning Python from scratch. You have to know something about programming and something about Python to get much from these first chapters. It isn't a beginners start here and it has lots of information that you really don't need until much later. If you do know Python and can program then it fills in a lot of the details concerning how Python works and how you can run it. It doesn't mention iPython in the list of IDEs, which is a big omission given how popular it is becoming.
Part II is on types and operators and covers the basics of strings, objects, numeric variables and more advanced data types such as lists and dictionaries. Notice that this means that the book covers data before control structures, functions and so on. This is a reasonable reflection of how most people think of Python, however.
It's not until Part III, at page 319, that we get on to control structures and more general syntax. This makes it difficult for a beginner to get to grips with programming quickly. This part also deals with more advanced ideas such as iterators, lambdas and comprehensions - these could have been left until later if the book really was trying to live up to its "Learning Python" title.
Part IV deals with functions from the basics, through features such as named parameters and on to advanced topics such as lambdas and generators.
Part V is all about modules and packages while Part VI deals with object oriented programming in great detail including some advanced topics and an example that aims to demonstrate why objects are a good idea. Part VII deals with exceptions and Part VIII is reserved for advanced topics - unicode, attributes, decorators and meta classes.
Part IX contains four appendixes:
A. Installation and Configuration
B. The Python 3.3 Windows Launcher
C. Python Changes and This Book
D. Solutions to End-of-Part Exercises
This brief outline of the book indicates the problem from the beginner's point of view. The author tends to be complete and once started on a topic tends to deal with it until it is complete. This tends to introduce lots of considerations that a beginner just doesn't want to know - yet. It also means that the beginner is kept waiting for simpler pieces of information that could complete the picture. In other words, this should not be called "Learning Python" it is much more a "Consolidating Python"
There aren't many examples, however, and the style of the text is very dry - a feature which many readers will welcome - with a sprinkling of Monty Python references - which many readers might not welcome.
While this book isn't entirely suited or aimed at the beginner, it also isn't really for the expert because it covers everything in minute detail and goes over the basics of programming. It also tends to be repetitive, mostly in an attempt to make each chapter self contained, which contributes to the size of the book. As long as you are prepared to skip bits this might not be a huge problem.
It is also important to know that it deals with Python 3.3 but points out differences with Python 2.7 as it goes along.
Overall this is a book that is probably not going to please any of its readers 100%. It is a useful intermediate-level, extensive look at Python and as long as you don't expect every page to be a reward for buying it you won't be disappointed. The parts of the book that I have read, or used to get up to speed on some aspect of Python,have been useful. Just think of it as an easy-to-read encyclopedic guide to Python and you won't go far wrong.