# Dive into Python 3
This book lives at diveintopython3.org. If you're reading it somewhere else, you may not have the latest version.
Keywords: Python, Python 3, Dive Into Python 3, tutorial, programming, documentation, book, free

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