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

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

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