xix
Contents
Identifying Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Working with Array Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Creating arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Converting between types . . . . . . . . . . . . . . . . . . . . . . . . . 69
Array methods and operations . . . . . . . . . . . . . . . . . . . . . . 71
Chapter 5: Control Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Making Decisions with If-Statements . . . . . . . . . . . . . . . . . . . . . . . 73
Using For-Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Anatomy of a for-loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Looping example: encoding strings . . . . . . . . . . . . . . . . . . . . 75
Ranges and xranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Breaking, continuing, and else-clauses . . . . . . . . . . . . . . . . . . 77
Changing horses in midstream . . . . . . . . . . . . . . . . . . . . . . . 78
Using While-Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Throwing and Catching Exceptions . . . . . . . . . . . . . . . . . . . . . . . 79
Passing the buck: propagating exceptions . . . . . . . . . . . . . . . . 80
Handling an exception . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
More on exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Defining and raising exceptions . . . . . . . . . . . . . . . . . . . . . . 82
Cleaning up with finally . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Debugging with Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Assertions in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Toggling assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Example: Game of Life . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Chapter 6: Program Organization . . . . . . . . . . . . . . . . . . . . . 87
Defining Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Pass by object reference . . . . . . . . . . . . . . . . . . . . . . . . . . 88
All about parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Arbitrary arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Apply: passing arguments from a tuple . . . . . . . . . . . . . . . . . . 90
A bit of functional programming . . . . . . . . . . . . . . . . . . . . . . 90
Grouping Code with Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Laying out a module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Taking inventory of a module . . . . . . . . . . . . . . . . . . . . . . . 92
Importing Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
What else happens upon import? . . . . . . . . . . . . . . . . . . . . . 93
Reimporting modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Exotic imports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Locating Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Python path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Compiled files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Understanding Scope Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Is it local or global? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Listing namespace contents . . . . . . . . . . . . . . . . . . . . . . . . 96
Grouping Modules into Packages . . . . . . . . . . . . . . . . . . . . . . . . 96
Compiling and Running Programmatically . . . . . . . . . . . . . . . . . . . 97
4807-7 FM.F 5/24/01 8:57 AM Page xix