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. It is not finalized. Only a few chapters have been written so far. The rest is just stubs and random notes to myself.

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

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

Case study: porting chardet to Python 3

Introducing chardet: a mini-FAQ

What is character encoding auto-detection?

Isn't that impossible?

Who wrote this detection algorithm?

Yippie! Screw the standards, I'll just auto-detect everything!

Why bother with auto-detection if it's slow, inaccurate, and non-standard?

Diving in

UTF-n with a BOM

Escaped encodings

Multi-byte encodings

Single-byte encodings

windows-1252

Running 2to3

Fixing what 2to3 can't

False is invalid syntax

No module named constants

Name 'file' is not defined

Can't use a string pattern on a bytes-like object

Can't convert 'bytes' object to str implicitly

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

...will likely get ported in time...

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...

Appendix A. Porting code to Python 3 with 2to3

Diving in

print statement

<> comparison

has_key() dictionary method

Dictionary methods that return lists

Modules that have been renamed or reorganized

http package

urllib package

dbm package

xmlrpc package

Other modules

Relative imports within a package

filter() global function

map() global function

reduce() global function (3.1+)

apply() global function

intern() global function

exec statement

execfile statement (3.1+)

repr literals (backticks)

try...except statement

raise statement

throw statement

long data type

xrange() global function

raw_input() and input() global functions

func_* function attributes

xreadlines() I/O method

lambda functions with multiple parameters

Special method attributes

next() iterator method

__nonzero__ special class attribute

Number literals

sys.maxint

unicode() global function

Unicode string literals

callable() global function

zip() global function

StandardError() exception

types module constants

isinstance global function (3.1+)

basestring datatype

itertools module

sys.exc_type, sys.exc_value, sys.exc_traceback

List comprehensions over tuples

os.getcwdu() function

Metaclasses

set() literals

buffer() global function

Whitespace around commas

Common idioms