\BOOKMARK [0][-]{chapter.1}{Introduction}{}% 1
\BOOKMARK [1][-]{section.1.1}{A 5-Minute Introductory Example}{chapter.1}% 2
\BOOKMARK [2][-]{subsection.1.1.1}{Example Program Code}{section.1.1}% 3
\BOOKMARK [2][-]{subsection.1.1.2}{Python Lists}{section.1.1}% 4
\BOOKMARK [2][-]{subsection.1.1.3}{Loops}{section.1.1}% 5
\BOOKMARK [2][-]{subsection.1.1.4}{Python Block Definition}{section.1.1}% 6
\BOOKMARK [2][-]{subsection.1.1.5}{Python Also Offers an Interactive Mode}{section.1.1}% 7
\BOOKMARK [2][-]{subsection.1.1.6}{Python As a Calculator}{section.1.1}% 8
\BOOKMARK [1][-]{section.1.2}{A 10-Minute Introductory Example}{chapter.1}% 9
\BOOKMARK [2][-]{subsection.1.2.1}{Example Program Code}{section.1.2}% 10
\BOOKMARK [2][-]{subsection.1.2.2}{Command-Line Arguments}{section.1.2}% 11
\BOOKMARK [2][-]{subsection.1.2.3}{Introduction to File Manipulation}{section.1.2}% 12
\BOOKMARK [2][-]{subsection.1.2.4}{Lack of Declaration}{section.1.2}% 13
\BOOKMARK [2][-]{subsection.1.2.5}{Locals Vs. Globals}{section.1.2}% 14
\BOOKMARK [2][-]{subsection.1.2.6}{A Couple of Built-In Functions}{section.1.2}% 15
\BOOKMARK [1][-]{section.1.3}{Types of Variables/Values}{chapter.1}% 16
\BOOKMARK [1][-]{section.1.4}{String Versus Numerical Values}{chapter.1}% 17
\BOOKMARK [1][-]{section.1.5}{Sequences}{chapter.1}% 18
\BOOKMARK [2][-]{subsection.1.5.1}{Lists \(Quasi-Arrays\)}{section.1.5}% 19
\BOOKMARK [2][-]{subsection.1.5.2}{Tuples}{section.1.5}% 20
\BOOKMARK [2][-]{subsection.1.5.3}{Strings}{section.1.5}% 21
\BOOKMARK [3][-]{subsubsection.1.5.3.1}{Strings As Turbocharged Tuples}{subsection.1.5.3}% 22
\BOOKMARK [3][-]{subsubsection.1.5.3.2}{Formatted String Manipulation}{subsection.1.5.3}% 23
\BOOKMARK [2][-]{subsection.1.5.4}{Sorting Sequences}{section.1.5}% 24
\BOOKMARK [1][-]{section.1.6}{Determining Object Types}{chapter.1}% 25
\BOOKMARK [1][-]{section.1.7}{Dictionaries \(Hashes\)}{chapter.1}% 26
\BOOKMARK [1][-]{section.1.8}{Function Definition}{chapter.1}% 27
\BOOKMARK [1][-]{section.1.9}{Use of \137\137name\137\137}{chapter.1}% 28
\BOOKMARK [1][-]{section.1.10}{Example: Computing Final Grades}{chapter.1}% 29
\BOOKMARK [1][-]{section.1.11}{Object-Oriented Programming}{chapter.1}% 30
\BOOKMARK [2][-]{subsection.1.11.1}{Example: Text File}{section.1.11}% 31
\BOOKMARK [2][-]{subsection.1.11.2}{The Objects}{section.1.11}% 32
\BOOKMARK [2][-]{subsection.1.11.3}{Constructors and Destructors}{section.1.11}% 33
\BOOKMARK [2][-]{subsection.1.11.4}{Instance Variables}{section.1.11}% 34
\BOOKMARK [2][-]{subsection.1.11.5}{Class Variables}{section.1.11}% 35
\BOOKMARK [2][-]{subsection.1.11.6}{Instance Methods}{section.1.11}% 36
\BOOKMARK [2][-]{subsection.1.11.7}{Class Methods}{section.1.11}% 37
\BOOKMARK [2][-]{subsection.1.11.8}{Example: Vending Machine Collection}{section.1.11}% 38
\BOOKMARK [2][-]{subsection.1.11.9}{Derived Classes}{section.1.11}% 39
\BOOKMARK [2][-]{subsection.1.11.10}{A Word on Class Implementation}{section.1.11}% 40
\BOOKMARK [1][-]{section.1.12}{Importance of Understanding Object References}{chapter.1}% 41
\BOOKMARK [1][-]{section.1.13}{Object Deletion}{chapter.1}% 42
\BOOKMARK [1][-]{section.1.14}{Object Comparison}{chapter.1}% 43
\BOOKMARK [1][-]{section.1.15}{Modules }{chapter.1}% 44
\BOOKMARK [2][-]{subsection.1.15.1}{Example Program Code}{section.1.15}% 45
\BOOKMARK [2][-]{subsection.1.15.2}{How import Works}{section.1.15}% 46
\BOOKMARK [2][-]{subsection.1.15.3}{Using reload\(\) to Renew an Import}{section.1.15}% 47
\BOOKMARK [2][-]{subsection.1.15.4}{``Compiled'' Code}{section.1.15}% 48
\BOOKMARK [2][-]{subsection.1.15.5}{Miscellaneous}{section.1.15}% 49
\BOOKMARK [2][-]{subsection.1.15.6}{A Note on Global Variables Within Modules}{section.1.15}% 50
\BOOKMARK [2][-]{subsection.1.15.7}{Data Hiding}{section.1.15}% 51
\BOOKMARK [1][-]{section.1.16}{Packages}{chapter.1}% 52
\BOOKMARK [1][-]{section.1.17}{Exception Handling \(Not Just for Exceptions!\)}{chapter.1}% 53
\BOOKMARK [1][-]{section.1.18}{Docstrings}{chapter.1}% 54
\BOOKMARK [1][-]{section.1.19}{Named Arguments in Functions}{chapter.1}% 55
\BOOKMARK [1][-]{section.1.20}{Terminal I/O Issues}{chapter.1}% 56
\BOOKMARK [2][-]{subsection.1.20.1}{Keyboard Input}{section.1.20}% 57
\BOOKMARK [2][-]{subsection.1.20.2}{Printing Without a Newline or Blanks}{section.1.20}% 58
\BOOKMARK [1][-]{section.1.21}{Example: Creating Linked Data Structures in Python}{chapter.1}% 59
\BOOKMARK [1][-]{section.1.22}{Making Use of Python Idioms}{chapter.1}% 60
\BOOKMARK [1][-]{section.1.23}{Decorators}{chapter.1}% 61
\BOOKMARK [1][-]{section.1.24}{Online Documentation}{chapter.1}% 62
\BOOKMARK [2][-]{subsection.1.24.1}{The dir\(\) Function}{section.1.24}% 63
\BOOKMARK [2][-]{subsection.1.24.2}{The help\(\) Function}{section.1.24}% 64
\BOOKMARK [2][-]{subsection.1.24.3}{PyDoc}{section.1.24}% 65
\BOOKMARK [1][-]{section.1.25}{Putting All Globals into a Class}{chapter.1}% 66
\BOOKMARK [1][-]{section.1.26}{Looking at the Python Virtual Machine}{chapter.1}% 67
\BOOKMARK [1][-]{section.1.27}{Running Python Scripts Without Explicitly Invoking the Interpreter}{chapter.1}% 68
\BOOKMARK [0][-]{chapter.2}{File and Directory Access in Python}{}% 69
\BOOKMARK [1][-]{section.2.1}{Files}{chapter.2}% 70
\BOOKMARK [2][-]{subsection.2.1.1}{Some Basic File Operations}{section.2.1}% 71
\BOOKMARK [2][-]{subsection.2.1.2}{Seek Example}{section.2.1}% 72
\BOOKMARK [1][-]{section.2.2}{Directories}{chapter.2}% 73
\BOOKMARK [2][-]{subsection.2.2.1}{Some Basic Directory Operations}{section.2.2}% 74
\BOOKMARK [2][-]{subsection.2.2.2}{Example: Finding a File}{section.2.2}% 75
\BOOKMARK [2][-]{subsection.2.2.3}{The Powerful walk\(\) Function}{section.2.2}% 76
\BOOKMARK [1][-]{section.2.3}{Cross-Platform Issues}{chapter.2}% 77
\BOOKMARK [2][-]{subsection.2.3.1}{The Small Stuff}{section.2.3}% 78
\BOOKMARK [2][-]{subsection.2.3.2}{How Is It Done?}{section.2.3}% 79
\BOOKMARK [2][-]{subsection.2.3.3}{Python and So-Called ``Binary'' Files}{section.2.3}% 80
\BOOKMARK [0][-]{chapter.3}{Functional Programming in Python}{}% 81
\BOOKMARK [1][-]{section.3.1}{Lambda Functions}{chapter.3}% 82
\BOOKMARK [1][-]{section.3.2}{Mapping}{chapter.3}% 83
\BOOKMARK [1][-]{section.3.3}{Filtering}{chapter.3}% 84
\BOOKMARK [1][-]{section.3.4}{Reduction}{chapter.3}% 85
\BOOKMARK [1][-]{section.3.5}{List Comprehension}{chapter.3}% 86
\BOOKMARK [1][-]{section.3.6}{Example: Textfile Class Revisited}{chapter.3}% 87
\BOOKMARK [1][-]{section.3.7}{Example: Prime Factorization}{chapter.3}% 88
\BOOKMARK [1][-]{section.3.8}{Example: a Function to Combine the Map and Filter Operations}{chapter.3}% 89
\BOOKMARK [0][-]{chapter.4}{Network Programming with Python}{}% 90
\BOOKMARK [1][-]{section.4.1}{Overview of Networks}{chapter.4}% 91
\BOOKMARK [2][-]{subsection.4.1.1}{Networks and MAC Addresses}{section.4.1}% 92
\BOOKMARK [2][-]{subsection.4.1.2}{The Internet and IP Addresses}{section.4.1}% 93
\BOOKMARK [2][-]{subsection.4.1.3}{Ports}{section.4.1}% 94
\BOOKMARK [2][-]{subsection.4.1.4}{Connectionless and Connection-Oriented Communication}{section.4.1}% 95
\BOOKMARK [2][-]{subsection.4.1.5}{Clients and Servers}{section.4.1}% 96
\BOOKMARK [1][-]{section.4.2}{Our Example Client/Server Pair}{chapter.4}% 97
\BOOKMARK [2][-]{subsection.4.2.1}{Analysis of the Server Program}{section.4.2}% 98
\BOOKMARK [2][-]{subsection.4.2.2}{Analysis of the Client Program}{section.4.2}% 99
\BOOKMARK [1][-]{section.4.3}{Role of the OS}{chapter.4}% 100
\BOOKMARK [2][-]{subsection.4.3.1}{Basic Operation}{section.4.3}% 101
\BOOKMARK [2][-]{subsection.4.3.2}{How the OS Distinguishes Between Multiple Connections}{section.4.3}% 102
\BOOKMARK [1][-]{section.4.4}{The sendall\(\) Function}{chapter.4}% 103
\BOOKMARK [1][-]{section.4.5}{Sending Lines of Text}{chapter.4}% 104
\BOOKMARK [2][-]{subsection.4.5.1}{Remember, It's Just One Big Byte Stream, Not ``Lines''}{section.4.5}% 105
\BOOKMARK [2][-]{subsection.4.5.2}{The Wonderful makefile\(\) Function}{section.4.5}% 106
\BOOKMARK [2][-]{subsection.4.5.3}{Getting the Tail End of the Data}{section.4.5}% 107
\BOOKMARK [1][-]{section.4.6}{Dealing with Asynchronous Inputs}{chapter.4}% 108
\BOOKMARK [2][-]{subsection.4.6.1}{Nonblocking Sockets}{section.4.6}% 109
\BOOKMARK [2][-]{subsection.4.6.2}{Advanced Methods of Polling}{section.4.6}% 110
\BOOKMARK [1][-]{section.4.7}{Troubleshooting}{chapter.4}% 111
\BOOKMARK [1][-]{section.4.8}{Other Libraries}{chapter.4}% 112
\BOOKMARK [1][-]{section.4.9}{Web Operations}{chapter.4}% 113
\BOOKMARK [0][-]{chapter.5}{Parallel Python: Threads and Multiprocessing Modules}{}% 114
\BOOKMARK [1][-]{section.5.1}{The Python Threads and Multiprocessing Modules}{chapter.5}% 115
\BOOKMARK [2][-]{subsection.5.1.1}{Python Threads Modules}{section.5.1}% 116
\BOOKMARK [3][-]{subsubsection.5.1.1.1}{The thread Module}{subsection.5.1.1}% 117
\BOOKMARK [3][-]{subsubsection.5.1.1.2}{Global Variables Revisited}{subsection.5.1.1}% 118
\BOOKMARK [3][-]{subsubsection.5.1.1.3}{The threading Module}{subsection.5.1.1}% 119
\BOOKMARK [2][-]{subsection.5.1.2}{Condition Variables}{section.5.1}% 120
\BOOKMARK [3][-]{subsubsection.5.1.2.1}{General Ideas}{subsection.5.1.2}% 121
\BOOKMARK [3][-]{subsubsection.5.1.2.2}{Other threading Classes}{subsection.5.1.2}% 122
\BOOKMARK [2][-]{subsection.5.1.3}{Threads Internals}{section.5.1}% 123
\BOOKMARK [3][-]{subsubsection.5.1.3.1}{Kernel-Level Thread Managers}{subsection.5.1.3}% 124
\BOOKMARK [3][-]{subsubsection.5.1.3.2}{User-Level Thread Managers}{subsection.5.1.3}% 125
\BOOKMARK [3][-]{subsubsection.5.1.3.3}{Comparison}{subsection.5.1.3}% 126
\BOOKMARK [3][-]{subsubsection.5.1.3.4}{The Python Thread Manager}{subsection.5.1.3}% 127
\BOOKMARK [3][-]{subsubsection.5.1.3.5}{The GIL}{subsection.5.1.3}% 128
\BOOKMARK [3][-]{subsubsection.5.1.3.6}{Implications for Randomness and Need for Locks}{subsection.5.1.3}% 129
\BOOKMARK [2][-]{subsection.5.1.4}{The multiprocessing Module}{section.5.1}% 130
\BOOKMARK [2][-]{subsection.5.1.5}{The Queue Module for Threads and Multiprocessing}{section.5.1}% 131
\BOOKMARK [2][-]{subsection.5.1.6}{Debugging Threaded and Multiprocessing Python Programs}{section.5.1}% 132
\BOOKMARK [1][-]{section.5.2}{Using Python with MPI}{chapter.5}% 133
\BOOKMARK [2][-]{subsection.5.2.1}{Using PDB to Debug Threaded Programs}{section.5.2}% 134
\BOOKMARK [2][-]{subsection.5.2.2}{RPDB2 and Winpdb}{section.5.2}% 135
\BOOKMARK [0][-]{chapter.6}{Python Iterators and Generators}{}% 136
\BOOKMARK [1][-]{section.6.1}{Iterators}{chapter.6}% 137
\BOOKMARK [2][-]{subsection.6.1.1}{What Are Iterators? Why Use Them?}{section.6.1}% 138
\BOOKMARK [2][-]{subsection.6.1.2}{Example: Fibonacci Numbers}{section.6.1}% 139
\BOOKMARK [2][-]{subsection.6.1.3}{The iter\(\) Function}{section.6.1}% 140
\BOOKMARK [2][-]{subsection.6.1.4}{Applications to Situations with an Indefinite Number of Iterations}{section.6.1}% 141
\BOOKMARK [3][-]{subsubsection.6.1.4.1}{Client/Server Example}{subsection.6.1.4}% 142
\BOOKMARK [3][-]{subsubsection.6.1.4.2}{``Circular'' Array Example}{subsection.6.1.4}% 143
\BOOKMARK [2][-]{subsection.6.1.5}{Overriding the next\(\) Function: File Subclass Example}{section.6.1}% 144
\BOOKMARK [2][-]{subsection.6.1.6}{Iterator Functions}{section.6.1}% 145
\BOOKMARK [3][-]{subsubsection.6.1.6.1}{General Functions}{subsection.6.1.6}% 146
\BOOKMARK [3][-]{subsubsection.6.1.6.2}{Example: Word Fetcher}{subsection.6.1.6}% 147
\BOOKMARK [3][-]{subsubsection.6.1.6.3}{The itertools Module}{subsection.6.1.6}% 148
\BOOKMARK [1][-]{section.6.2}{Generators}{chapter.6}% 149
\BOOKMARK [2][-]{subsection.6.2.1}{General Structures}{section.6.2}% 150
\BOOKMARK [2][-]{subsection.6.2.2}{Example: Fibonacci Numbers}{section.6.2}% 151
\BOOKMARK [2][-]{subsection.6.2.3}{Example: Word Fetcher}{section.6.2}% 152
\BOOKMARK [2][-]{subsection.6.2.4}{Mutiple Iterators from the Same Generator}{section.6.2}% 153
\BOOKMARK [2][-]{subsection.6.2.5}{The os.path.walk\(\) Function}{section.6.2}% 154
\BOOKMARK [2][-]{subsection.6.2.6}{Don't Put yield in a Subfunction}{section.6.2}% 155
\BOOKMARK [2][-]{subsection.6.2.7}{Coroutines}{section.6.2}% 156
\BOOKMARK [3][-]{subsubsection.6.2.7.1}{The SimPy Discrete Event Simulation Library}{subsection.6.2.7}% 157
\BOOKMARK [0][-]{chapter.7}{Python Curses Programming}{}% 158
\BOOKMARK [1][-]{section.7.1}{Function}{chapter.7}% 159
\BOOKMARK [1][-]{section.7.2}{History}{chapter.7}% 160
\BOOKMARK [1][-]{section.7.3}{Relevance Today}{chapter.7}% 161
\BOOKMARK [1][-]{section.7.4}{Examples of Python Curses Programs}{chapter.7}% 162
\BOOKMARK [2][-]{subsection.7.4.1}{Useless Example}{section.7.4}% 163
\BOOKMARK [2][-]{subsection.7.4.2}{Useful Example}{section.7.4}% 164
\BOOKMARK [2][-]{subsection.7.4.3}{A Few Other Short Examples}{section.7.4}% 165
\BOOKMARK [1][-]{section.7.5}{What Else Can Curses Do?}{chapter.7}% 166
\BOOKMARK [2][-]{subsection.7.5.1}{Curses by Itself}{section.7.5}% 167
\BOOKMARK [1][-]{section.7.6}{Libraries Built on Top of Curses}{chapter.7}% 168
\BOOKMARK [1][-]{section.7.7}{If Your Terminal Window Gets Messed Up}{chapter.7}% 169
\BOOKMARK [1][-]{section.7.8}{Debugging}{chapter.7}% 170
\BOOKMARK [0][-]{chapter.8}{Python Debugging}{}% 171
\BOOKMARK [1][-]{section.8.1}{The Essence of Debugging: The Principle of Confirmation}{chapter.8}% 172
\BOOKMARK [1][-]{section.8.2}{Plan for This Chapter}{chapter.8}% 173
\BOOKMARK [1][-]{section.8.3}{Python's Built-In Debugger, PDB}{chapter.8}% 174
\BOOKMARK [2][-]{subsection.8.3.1}{The Basics}{section.8.3}% 175
\BOOKMARK [2][-]{subsection.8.3.2}{Using PDB Macros}{section.8.3}% 176
\BOOKMARK [2][-]{subsection.8.3.3}{Using \137\137dict\137\137}{section.8.3}% 177
\BOOKMARK [2][-]{subsection.8.3.4}{The type\(\) Function}{section.8.3}% 178
\BOOKMARK [2][-]{subsection.8.3.5}{Using PDB with Emacs}{section.8.3}% 179
\BOOKMARK [1][-]{section.8.4}{Debugging with Xpdb}{chapter.8}% 180
\BOOKMARK [1][-]{section.8.5}{Debugging with Winpdb \(GUI\)}{chapter.8}% 181
\BOOKMARK [1][-]{section.8.6}{Debugging with Eclipse \(GUI\)}{chapter.8}% 182
\BOOKMARK [1][-]{section.8.7}{Debugging with PUDB}{chapter.8}% 183
\BOOKMARK [1][-]{section.8.8}{Some Python Internal Debugging Aids}{chapter.8}% 184
\BOOKMARK [2][-]{subsection.8.8.1}{The str\(\) Method}{section.8.8}% 185
\BOOKMARK [2][-]{subsection.8.8.2}{The locals\(\) Function}{section.8.8}% 186
\BOOKMARK [2][-]{subsection.8.8.3}{The \137\137dict\137\137 Attribute}{section.8.8}% 187
\BOOKMARK [2][-]{subsection.8.8.4}{The id\(\) Function}{section.8.8}% 188
