资源说明:xvii
Contents
Finishing Your Modules
154
Defining Module-Specific Errors
154
Choosing What to Export
155
Documenting Your Modules
156
Try It Out: Viewing Module Documentation
157
Testing Your Module
162
Running a Module as a Program
164
Try It Out: Running a Module
164
Creating a Whole Module
165
Try It Out: Finishing a Module
165
Try It Out: Smashing Imports
169
Installing Your Modules
170
Try It Out: Creating an Installable Package
171
Summary
174
Exercises
174
Chapter 11: Text Processing
175
Why Text Processing Is So Useful
175
Searching for Files
176
Clipping Logs
177
Sifting through Mail
178
Navigating the File System with the os Module
178
Try It Out: Listing Files and Playing with Paths
180
Try It Out: Searching for Files of a Particular Type
181
Try It Out: Refining a Search
183
Working with Regular Expressions and the re Module
184
Try It Out: Fun with Regular Expressions
186
Try It Out: Adding Tests
187
Summary
189
Exercises
189
Chapter 12: Testing
191
Assertions
191
Try It Out: Using Assert
192
Test Cases and Test Suites
193
Try It Out: Testing Addition
194
Try It Out: Testing Faulty Addition
195
Test Fixtures
196
Try It Out: Working with Test Fixtures
197
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xvii
xviii
Contents
Putting It All Together with Extreme Programming
199
Implementing a Search Utility in Python
200
Try It Out: Writing a Test Suite First
201
Try It Out: A General-Purpose Search Framework
203
A More Powerful Python Search
205
Try It Out: Extending the Search Framework
206
Formal Testing in the Software Life Cycle
207
Summary
208
Chapter 13: Writing a GUI with Python
209
GUI Programming Toolkits for Python
209
PyGTK Introduction
210
pyGTK Resources
211
Creating GUI Widgets with pyGTK
213
Try It Out: Writing a Simple pyGTK Program
213
GUI Signals
214
GUI Helper Threads and the GUI Event Queue
216
Try It Out: Writing a Multithreaded pyGTK App
219
Widget Packing
222
Glade: a GUI Builder for pyGTK
223
GUI Builders for Other GUI Frameworks
224
Using libGlade with Python
225
A Glade Walkthrough
225
Starting Glade
226
Creating a Project
227
Using the Palette to Create a Window
227
Putting Widgets into the Window
228
Glade Creates an XML Representation of the GUI
230
Try It Out: Building a GUI from a Glade File
231
Creating a Real Glade Application
231
Advanced Widgets
238
Further Enhancing PyRAP
241
Summary
248
Exercises
248
Chapter 14: Accessing Databases
249
Working with DBM Persistent Dictionaries
250
Choosing a DBM Module
250
Creating Persistent Dictionaries
251
Try It Out: Creating a Persistent Dictionary
251
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xviii
xix
Contents
Accessing Persistent Dictionaries
252
Try It Out: Accessing Persistent Dictionaries
253
Deciding When to Use DBM and When to Use a Relational Database
255
Working with Relational Databases
255
Writing SQL Statements
257
Defining Tables
259
Setting Up a Database
260
Try It Out: Creating a Gadfly Database
261
Using the Python Database APIs
262
Downloading Modules
263
Creating Connections
263
Working with Cursors
264
Try It Out: Inserting Records
264
Try It Out: Writing a Simple Query
266
Try It Out: Writing a Complex Join
267
Try It Out: Updating an Employee’s Manager
269
Try It Out: Removing Employees
270
Working with Transactions and Committing the Results
271
Examining Module Capabilities and Metadata
272
Handling Errors
272
Summary
273
Exercises
274
Chapter 15: Using Python for XML
275
What Is XML?
275
A Hierarchical Markup Language
275
A Family of Standards
277
What Is a Schema/DTD?
278
What Are Document Models For?
278
Do You Need One?
278
Document Type Definitions
278
An Example DTD
278
DTDs Aren’t Exactly XML
280
Limitations of DTDs
280
Schemas
280
An Example Schema
280
Schemas Are Pure XML
281
Schemas Are Hierarchical
281
Other Advantages of Schemas
281
Schemas Are Less Widely Supported
281
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xix
xx
Contents
XPath
282
HTML as a Subset of XML
282
The HTML DTDs
283
HTMLParser
283
Try It Out: Using HTMLParser
283
htmllib
284
Try It Out: Using htmllib
284
XML Libraries Available for Python
285
Validating XML Using Python
285
What Is Validation?
286
Well-Formedness versus Validation
286
Available Tools
286
Try It Out: Validation Using xmlproc
286
What Is SAX?
287
Stream-based
288
Event-driven
288
What Is DOM?
288
In-memory Access
288
Why Use SAX or DOM
289
Capability Trade-Offs
289
Memory Considerations
289
Speed Considerations
289
SAX and DOM Parsers Available for Python
289
PyXML
290
xml.sax
290
xml.dom.minidom
290
Try It Out: Working with XML Using DOM
290
Try It Out: Working with XML Using SAX
292
Intro to XSLT
293
XSLT Is XML
293
Transformation and Formatting Language
293
Functional,Template-Driven
293
Using Python to Transform XML Using XSLT
294
Try It Out: Transforming XML with XSLT
294
Putting It All Together: Working with RSS
296
RSS Overview and Vocabulary
296
Making Sense of It All
296
RSS Vocabulary
297
An RSS DTD
297
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xx
xxi
Contents
A Real-World Problem
297
Try It Out: Creating an RSS Feed
298
Creating the Document
300
Checking It Against the DTD
301
Another Real-World Problem
301
Try It Out: Creating An Aggregator
301
Summary
303
Exercises
303
Chapter 16: Network Programming
305
Try It Out: Sending Some E-mail
305
Understanding Protocols
307
Comparing Protocols and Programming Languages
307
The Internet Protocol Stack
308
A Little Bit About the Internet Protocol
309
Internet Addresses
309
Internet Ports
310
Sending Internet E-mail
311
The E-mail File Format
311
MIME Messages
313
MIME Encodings: Quoted-printable and Base64
313
MIME Content Types
314
Try It Out: Creating a MIME Message with an Attachment
315
MIME Multipart Messages
316
Try It Out: Building E-mail Messages with SmartMessage
320
Sending Mail with SMTP and smtplib
321
Try It Out: Sending Mail with MailServer
323
Retrieving Internet E-mail
323
Parsing a Local Mail Spool with mailbox
323
Try It Out: Printing a Summary of Your Mailbox
324
Fetching Mail from a POP3 Server with poplib
325
Try It Out: Printing a Summary of Your POP3 Mailbox
327
Fetching Mail from an IMAP Server with imaplib
327
Try It Out: Printing a Summary of Your IMAP Mailbox
329
IMAP’s Unique Message IDs
330
Try It Out: Fetching a Message by Unique ID
330
Secure POP3 and IMAP
331
Webmail Applications Are Not E-mail Applications
331
Socket Programming
331
Introduction to Sockets
332
Try It Out: Connecting to the SuperSimpleSocketServer with Telnet
333
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xxi
xxii
Contents
Binding to an External Hostname
334
The Mirror Server
335
Try It Out: Mirroring Text with the MirrorServer
336
The Mirror Client
336
SocketServer
337
Multithreaded Servers
339
The Python Chat Server
340
Design of the Python Chat Server
340
The Python Chat Server Protocol
341
Our Hypothetical Protocol in Action
341
Initial Connection
342
Chat Text
342
Server Commands
342
General Guidelines
343
The Python Chat Client
346
Single-Threaded Multitasking with select
348
Other Topics
350
Miscellaneous Considerations for Protocol Design
350
Trusted Servers
350
Terse Protocols
350
The Twisted Framework
351
Deferred Objects
351
The Peer-to-Peer Architecture
354
Summary
354
Exercises
354
Chapter 17: Extension Programming with C
355
Extension Module Outline
356
Building and Installing Extension Modules
358
Passing Parameters from Python to C
360
Returning Values from C to Python
363
The LAME Project
364
The LAME Extension Module
368
Using Python Objects from C Code
380
Summary
383
Exercises
383
Chapter 18: Writing Shareware and Commercial Programs
385
A Case Study: Background
385
How Much Python Should You Use?
386
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xxii
xxiii
Contents
Pure Python Licensing
387
Web Services Are Your Friend
388
Pricing Strategies
389
Watermarking
390
Other Models
394
Selling as a Platform,Rather Than a Product
395
Your Development Environment
395
Finding Python Programmers
396
Training non-Python Programmers
397
Python Employment Resources
397
Python Problems
397
Porting to Other Versions of Python
397
Porting to Other Operating Systems
398
Debugging Threads
399
Common Gotchas
399
Portable Distribution
400
Essential Libraries
401
Timeoutsocket
401
PyGTK
402
GEOip
402
Summary
403
Chapter 19: Numerical Programming
405
Numbers in Python
405
Integers
406
Long Integers
406
Floating-point Numbers
407
Formatting Numbers
408
Characters as Numbers
410
Mathematics
412
Arithmetic
412
Built-in Math Functions
414
The math Module
415
Complex Numbers
416
Arrays
418
The array Module
420
The numarray Package
422
Using Arrays
422
Computing the Standard Deviation
423
Summary
424
Exercises
425
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xxiii
xxiv
Contents
Chapter 20: Python in the Enterprise
427
Enterprise Applications
428
Document Management
428
The Evolution of Document Management Systems
429
What You Want in a Document Management System
430
People in Directories
431
Taking Action with Workflow
432
Auditing,Sarbanes-Oxley,and What You Need to Know
433
Auditing and Document Management
434
Working with Actual Enterprise Systems
435
Introducing the wftk Workflow Toolkit
435
Try It Out: Very Simple Record Retrieval
436
Try It Out: Very Simple Record Storage
438
Try It Out: Data Storage in MySQL
439
Try It Out: Storing and Retrieving Documents
441
Try It Out: A Document Retention Framework
446
The python-ldap Module
448
Try It Out: Using Basic OpenLDAP Tools
449
Try It Out: Simple LDAP Search
451
More LDAP
453
Back to the wftk
453
Try It Out: Simple Workflow Trigger
454
Try It Out: Action Queue Handler
456
Summary
458
Exercises
458
Chapter 21: Web Applications and Web Services
459
REST: The Architecture of the Web
460
Characteristics of REST
460
A Distributed Network of Interlinked Documents
461
A Client-Server Architecture
461
Servers Are Stateless
461
Resources
461
Representations
462
REST Operations
462
HTTP: Real-World REST
463
Try It Out: Python’s Three-Line Web Server
463
The Visible Web Server
464
Try It Out: Seeing an HTTP Request and Response
465
The HTTP Request
466
The HTTP Response
467
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xxiv
xxv
Contents
CGI: Turning Scripts into Web Applications
468
Try It Out: Running a CGI Script
469
The Web Server Makes a Deal with the CGI Script
470
CGI’s Special Environment Variables
471
Accepting User Input through HTML Forms
473
The cgi Module: Parsing HTML Forms
474
Try It Out: Printing Any HTML Form Submission
478
Building a Wiki
480
The BittyWiki Core Library
481
Back-end Storage
481
WikiWords
481
Writing the BittyWiki Core
481
Try It Out: Creating Wiki Pages from an Interactive Python Session
483
The BittyWiki Web Interface
484
Resources
484
Request Structure
484
But Wait—There’s More (Resources)
485
Wiki Markup
486
Web Services
493
How Web Services Work
494
REST Web Services
494
REST Quick Start: Finding Bargains on Amazon.com
495
Try It Out: Peeking at an Amazon Web Services Response
496
Introducing WishListBargainFinder
497
Giving BittyWiki a REST API
500
Wiki Search-and-Replace Using the REST Web Service
503
Try It Out: Wiki Searching and Replacing
507
XML-RPC
508
XML-RPC Quick Start: Get Tech News from Meerkat
509
The XML-RPC Request
511
Representation of Data in XML-RPC
512
The XML-RPC Response
513
If Something Goes Wrong
513
Exposing the BittyWiki API through XML-RPC
514
Try It Out: Manipulating BittyWiki through XML-RPC
517
Wiki Search-and-Replace Using the XML-RPC Web Service
518
SOAP
520
SOAP Quick Start: Surfing the Google API
520
The SOAP Request
522
The SOAP Response
524
If Something Goes Wrong
524
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xxv
xxvi
Contents
Exposing a SOAP Interface to BittyWiki
525
Try It Out: Manipulating BittyWiki through SOAP
526
Wiki Search-and-Replace Using the SOAP Web Service
527
Documenting Your Web Service API
529
Human-Readable API Documentation
529
The BittyWiki REST API Document
529
The BittyWiki XML-RPC API Document
529
The BittyWiki SOAP API Document
530
The XML-RPC Introspection API
530
Try It Out: Using the XML-RPC Introspection API
530
WSDL
531
Try It Out: Manipulating BittyWiki through a WSDL Proxy
533
Choosing a Web Service Standard
534
Web Service Etiquette
535
For Consumers of Web Services
535
For Producers of Web Services
535
Using Web Applications as Web Services
536
A Sampling of Publicly Available
Web Services
536
Summary
538
Exercises
538
Chapter 22: Integrating Java with Python
539
Scripting within Java Applications
540
Comparing Python Implementations
541
Installing Jython
541
Running Jython
542
Running Jython Interactively
542
Try It Out: Running the Jython Interpreter
542
Running Jython Scripts
543
Try It Out Running a Python Script
543
Controlling the jython Script
544
Making Executable Commands
545
Try It Out: Making an Executable Script
546
Running Jython on Your Own
546
Packaging Jython-Based Applications
547
Integrating Java and Jython
547
Using Java Classes in Jython
548
Try It Out: Calling on Java Classes
548
Try It Out: Creating a User Interface from Jython
550
Accessing Databases from Jython
552
Working with the Python DB API
553
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xxvi
xxvii
Contents
Setting Up a Database
554
Try It Out: Create Tables
555
Writing J2EE Servlets in Jython
558
Setting Up an Application Server
559
Adding the PyServlet to an Application Server
560
Extending HttpServlet
561
Try It Out: Writing a Python Servlet
562
Choosing Tools for Jython
564
Testing from Jython
565
Try It Out: Exploring Your Environment with Jython
565
Embedding the Jython Interpreter
566
Calling Jython Scripts from Java
566
Try It Out: Embedding Jython
567
Compiling Python Code to Java
568
Handling Differences between C Python and Jython
569
Summary
570
Exercises
571
Appendix A: Answers to Exercises
573
Appendix B: Online Resources
605
Appendix C: What’s New in Python 2.4
609
Glossary
613
Index
623
Contents
Acknowledgments
xxix
Introduction
xxxi
Chapter 1: Programming Basics and Strings
1
How Programming Is Different from Using a Computer
1
Programming Is Consistency
2
Programming Is Control
2
Programming Copes with Change
2
What All That Means Together
3
The First Steps
3
Starting codeEditor
3
Using codeEditor’s Python Shell
4
Try It Out: Starting the Python Shell
4
Beginning to Use Python—Strings
5
What Is a String?
5
Why the Quotes?
6
Try It Out: Entering Strings with Different Quotes
6
Understanding Different Quotes
6
Putting Two Strings Together
8
Try It Out: Using + to Combine Strings
8
Putting Strings Together in Different Ways
9
Try It Out: Using a Format Specifier to Populate a String
9
Try It Out: More String Formatting
9
Displaying Strings with Print
10
Try It Out: Printing Text with Print
10
Summary
10
Exercises
11
Chapter 2: Numbers and Operators
13
Different Kinds of Numbers
13
Numbers in Python
14
Try It Out: Using Type with Different Numbers
14
Try It Out: Creating an Imaginary Number
15
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xi
xii
Contents
Program Files
15
Try It Out: Using the Shell with the Editor
16
Using the Different Types
17
Try It Out Including Different Numbers in Strings
18
Try It Out: Escaping the % Sign in Strings
18
Basic Math
19
Try It Out Doing Basic Math
19
Try It Out: Using the Modulus Operation
20
Some Surprises
20
Try It Out: Printing the Results
21
Using Numbers
21
Order of Evaluation
21
Try It Out: Using Math Operations
21
Number Formats
22
Try It Out: Using Number Formats
22
Mistakes Will Happen
23
Try It Out: Making Mistakes
23
Some Unusual Cases
24
Try It Out: Formatting Numbers as Octal and Hexadecimal
24
Summary
24
Exercises
25
Chapter 3: Variables—Names for Values
27
Referring to Data – Using Names for Data
27
Try It Out: Assigning Values to Names
28
Changing Data Through Names
28
Try It Out: Altering Named Values
29
Copying Data
29
Names You Can’t Use and Some Rules
29
Using More Built-in Types
30
Tuples—Unchanging Sequences of Data
30
Try It Out: Creating and Using a Tuple
30
Try It Out: Accessing a Tuple Through Another Tuple
31
Lists—Changeable Sequences of Data
33
Try It Out Viewing the Elements of a List
33
Dictionaries—Groupings of Data Indexed by Name
34
Try It Out: Making a Dictionary
34
Try It Out: Getting the Keys from a Dictionary
35
Treating a String Like a List
36
Special Types
38
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xii
xiii
Contents
Other Common Sequence Properties
38
Referencing the Last Elements
38
Ranges of Sequences
39
Try It Out: Slicing Sequences
39
Growing Lists by Appending Sequences
40
Using Lists to Temporarily Store Data
40
Try It Out: Popping Elements from a List
40
Summary
41
Exercises
42
Chapter 4: Making Decisions
43
Comparing Values—Are They the Same?
43
Try It Out: Comparing Values for Sameness
43
Doing the Opposite—Not Equal
45
Try It Out: Comparing Values for Difference
45
Comparing Values—Which One Is More?
45
Try It Out: Comparing Greater Than and Less Than
45
More Than or Equal,Less Than or Equal
47
Reversing True and False
47
Try It Out: Reversing the Outcome of a Test
47
Looking for the Results of More Than One Comparison
48
How to Get Decisions Made
48
Try It Out: Placing Tests within Tests
49
Repetition
51
How to Do Something—Again and Again
51
Try It Out: Using a while Loop
51
Stopping the Repetition
52
Try It Out: Using else While Repeating
54
Try It Out: Using continue to Keep Repeating
54
Handling Errors
55
Trying Things Out
55
Try It Out: Creating an Exception with Its Explanation
56
Summary
57
Exercises
58
Chapter 5: Functions
59
Putting Your Program into Its Own File
59
Try It Out: Run a Program with Python -i
61
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xiii
xiv
Contents
Functions: Grouping Code under a Name
61
Try It Out: Defining a Function
61
Choosing a Name
62
Describing a Function in the Function
63
Try It Out: Displaying __doc__
63
The Same Name in Two Different Places
64
Making Notes to Yourself
65
Try It Out: Experimenting with Comments
65
Asking a Function to Use a Value You Provide
66
Try It Out Invoking a Function with Parameters
67
Checking Your Parameters
68
Try It Out: Determining More Types with the type Function
69
Try It Out: Using Strings to Compare Types
69
Setting a Default Value for a Parameter—Just in Case
70
Try It Out: Setting a Default Parameter
70
Calling Functions from within Other Functions
71
Try It Out: Invoking the Completed Function
72
Functions Inside of Functions
72
Flagging an Error on Your Own Terms
73
Layers of Functions
74
How to Read Deeper Errors
74
Summary
75
Exercises
76
Chapter 6: Classes and Objects
79
Thinking About Programming
79
Objects You Already Know
79
Looking Ahead: How You Want to Use Objects
81
Defining a Class
81
How Code Can Be Made into an Object
81
Try It Out: Defining a Class
82
Try It Out: Creating an Object from Your Class
82
Try It Out: Writing an Internal Method
84
Try It Out: Writing Interface Methods
85
Try It Out: Using More Methods
87
Objects and Their Scope
89
Try It Out: Creating Another Class
89
Summary
92
Exercises
93
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xiv
xv
Contents
Chapter 7: Organizing Programs
95
Modules
96
Importing a Module So That You Can Use It
96
Making a Module from Pre-existing Code
97
Try It Out: Creating a Module
97
Try It Out: Exploring Your New Module
98
Using Modules—Starting With the Command Line
99
Try It Out: Printing sys.argv
100
Changing How Import Works—Bringing in More
101
Packages
101
Try It Out: Making the Files in the Kitchen Class
102
Modules and Packages
103
Bringing Everything into the Current Scope
103
Try It Out: Exporting Modules from a Package
104
Re-importing Modules and Packages
104
Try It Out: Examining sys.modules
105
Basics of Testing Your Modules and Packages
106
Summary
106
Exercises
107
Chapter 8: Files and Directories
109
File Objects
109
Writing Text Files
110
Reading Text Files
111
Try It Out: Printing the Lengths of Lines in the Sample File
112
File Exceptions
113
Paths and Directories
113
Paths
114
Directory Contents
116
Try It Out: Getting the Contents of a Directory
116
Try It Out: Listing the Contents of Your Desktop or Home Directory
118
Obtaining Information about Files
118
Recursive Directory Listings
118
Renaming,Moving,Copying,and Removing Files
119
Example: Rotating Files
120
Creating and Removing Directories
121
Globbing
122
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xv
xvi
Contents
Pickles
123
Try It Out: Creating a Pickle File
123
Pickling Tips
124
Efficient Pickling
125
Summary
125
Exercises
125
Chapter 9: Other Features of the Language
127
Lambda and Filter: Short Anonymous Functions
127
Reduce
128
Try It Out: Working with Reduce
128
Map: Short-Circuiting Loops
129
Try It Out: Use Map
129
Decisions within Lists—List Comprehension
130
Generating Lists for Loops
131
Try It Out: Examining an xrange Object
132
Special String Substitution Using Dictionaries
133
Try It Out: String Formatting with Dictionaries
133
Featured Modules
134
Getopt—Getting Options from the Command Line
134
Using More Than One Process
137
Threads—Doing Many Things in the Same Process
139
Storing Passwords
140
Summary
141
Exercises
142
Chapter 10: Building a Module
143
Exploring Modules
143
Importing Modules
145
Finding Modules
145
Digging through Modules
146
Creating Modules and Packages
150
Try It Out: Creating a Module with Functions
150
Working with Classes
151
Defining Object-Oriented Programming
151
Creating Classes
151
Try It Out: Creating a Meal Class
152
Extending Existing Classes
153
02_596543 ftoc.qxd 6/29/05 10:55 PM Page xvi
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。