Dive Into Python 3 will cover Python 3 and its differences from Python 2. Compared to the original Dive Into Python, it will be about 50% revised and 50% new material. I will publish drafts online as I go. The final version will be published on paper by Apress. The book will remain online under the CC-BY-3.0 license.
There is a changelog, a feed, and discussion on Reddit. The final version will be downloadable as HTML and PDF. During development, the only way to download it is to clone the Mercurial repository:
you@localhost:~$ hg clone http://hg.diveintopython3.org/ diveintopython3
Below is the draft table of contents. It is not finalized. Only a few chapters have been written so far. The rest is just stubs and random notes to myself.
Installing Python
Python on Windows
Python on Mac OS X
Python on Linux
Python from source
The interactive shell
Summary
Diving in
Declaring functions
How Python's datatypes compare to other programming languages
Writing readable code
Why bother?
Docstrings
Function annotations
Style conventions
Everything is an object
The import search path
What's an object?
Indenting code
Testing modules
Summary
Native Python datatypes
Lists
Differences from Python 2
Creating new a list
Modifying a list
Searching a list
Deleting elements from a list
List operators
Looping through a list (list comprehensions)
Tuples
Dictionaries
Differences from Python 2
Creating a new dictionary
Modifying a dictionary
Deleting items from a dictionary
Looping through a dictionary (dictionary comprehensions)
Dictionary views
Sets
Differences from Python 2
Creating a new set
Modifying a set
Deleting elements from a set
Common set operations: union, intersection, and difference
Frozen sets
Numbers
Differences from Python 2
Integers
Long integers
Floating point numbers
Complex numbers
Common numerical operations
Iterators
Generators
Views
...
Strings
There ain't no such thing as "plain text"
A brief history of character encoding
What's a character?
How strings are stored in memory
Converting between different character encodings
Differences from Python 2
Formatting strings
What's my string?
Lists and strings
Historical note on the string module
Byte streams
Summary
The power of introspection
Diving in
Using optional and named arguments
Keyword-only arguments
Using type, str, dir, and other built-in functions
The type function
The str function
Built-in functions
Getting object references with getattr
getattr with modules
getattr as a dispatcher
Filtering lists
The peculiar nature of and and or
Using the and-or trick
Using lambda functions
Real-world lambda functions
Putting it all together
Summary
Objects and object-orientation
...major changes afoot...
...stuff about decorators...
...stuff about importing modules...
...mention why "from module import *" is only allowed at module level
Exceptions
...
Files
File objects
Reading files
Close your files... or don't
Handling I/O errors
Writing to files
Regular expressions
Diving in
Case study: street addresses
Case study: Roman numerals
Checking for thousands
Checking for hundreds
Using the {n,m} syntax
Checking for tens and ones
Verbose regular expressions
Case study: parsing phone numbers
Summary
HTML processing
Diving in
html5lib
Installing html5lib
Using html5lib
Extracting data from HTML documents
Building HTML documents
Putting it all together
Summary
XML Processing
...major changes afoot...
HTTP web services
Diving in
How not to fetch data over HTTP
Features of HTTP
User-Agent
Redirects
Last-Modified/If-Modified-Since
ETag-If-None-Match
Compression
Differences from Python 2
httplib2 (note: needs port)
Installing httplib2
Why httplib2 is better than http.client
Debugging HTTP web services
Setting the User-Agent
Handling Last-Modified and ETag
Handling redirects
Handling compressed data
Putting it all together
Summary
Unit testing
Introduction to Roman numerals
Diving in
Introducing romantest.py
Testing for success
Testing for failure
Testing for sanity
Test-first programming
roman.py, stage 1
roman.py, stage 2
roman.py, stage 3
roman.py, stage 4
roman.py, stage 5
Refactoring your code
Handling bugs
Handling changing requirements
The art of refactoring
Postscript
Summary
Dynamic functions
Diving in
plural.py, stage 1
plural.py, stage 2
plural.py, stage 3
plural.py, stage 4
plural.py, stage 5
plural.py, stage 6
Summary
Metaclasses
...once I figure out WTF metaclasses are...
Performance tuning
Diving in
Using the timeit module
Optimizing regular expressions
Optimizing dictionary lookups
Optimizing list operations
Optimizing string manipulation
Summary
Packaging Python libraries
A brief history of packaging (and why it's harder than you think)
setuptools
distutils
Eggs
pip
Platform-specific packaging
Packaging by Linux distributions
Py2exe
Creating graphics with the Python Imaging Library
Where to go from here
Tentative because most of these have not been ported to Python 3 yet.
WSGI
Django
Pylons
TurboGears
AppEngine
IronPython
Jython
PyPy
Stackless Python
Scripts and streams
...will be folded into other chapters...
Functional programming
...bits and pieces will be folded into other chapters...
SOAP web services
...no one will miss you...
This site is optimized for Lynx just because fuck you.
I’m told it also looks good in graphical browsers.
© 2001-4, 2009 ℳark Pilgrim, CC-BY-3.0