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 book will be published on paper by Apress. The book will remain online under the CC-BY-3.0 license.
Below is the draft table of contents. There is no text yet.
Yes, that is PapayaWhip. All hail PapayaWhip.
Installing Python
Python on Windows
Python on Mac OS X
Python on Linux
Python from source
The interactive shell
Summary
Your first Python program
Diving in
Declaring functions
How Python's datatypes compare to other programming languages
Documenting functions
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
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...
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...
Scripts and streams
...will be folded into other chapters...
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
SOAP web services
...no one will miss you...
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
Functional programming
...bits and pieces will be folded into other chapters...
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
Migrating old code to Python 3
Diving in
The 2to3 migration tool
Things the 2to3 tools won't catch
Case study: feedparser
Just shoot me
Summary
Creating graphics with the Python Imaging Library
...if it gets ported...
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
Psyco
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