Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Beginning Python
PREMIUM
Số trang
641
Kích thước
13.3 MB
Định dạng
PDF
Lượt xem
1168

Beginning Python

Nội dung xem thử

Mô tả chi tiết

Beginning Python

From Novice to Professional

■■■

Magnus Lie Hetland

Hetland_519XFront.fm Page i Tuesday, August 23, 2005 5:04 AM

Beginning Python: From Novice to Professional

Copyright © 2005 by Magnus Lie Hetland

All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,

electronic or mechanical, including photocopying, recording, or by any information storage or retrieval

system, without the prior written permission of the copyright owner and the publisher.

ISBN (pbk): 1-59059-519-X

Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1

Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence

of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark

owner, with no intention of infringement of the trademark.

Lead Editor: Jason Gilmore

Editor: Matt Moodie

Technical Reviewer: Jeremy Jones

Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Tony Davis, Jason Gilmore,

Jonathan Hassell, Chris Mills, Dominic Shakeshaft, Jim Sumser

Associate Publisher: Grace Wong

Project Manager: Beckie Stones

Copy Edit Manager: Nicole LeClerc

Copy Editor: Ami Knox

Assistant Production Director: Kari Brooks-Copony

Production Editor: Linda Marousek

Compositor: Susan Glinert Stevens

Proofreader: Liz Welch

Indexer: Michael Brinkman

Interior Designer: Van Winkle Design Group

Cover Designer: Kurt Krames

Manufacturing Director: Tom Debolski

Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,

New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or

visit http://www.springeronline.com.

For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA

94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com.

The information in this book is distributed on an “as is” basis, without warranty. Although every precaution

has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to

any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly

by the information contained in this work.

The source code for this book is available to readers at http://www.apress.com in the Source Code section.

Hetland_519XFront.fm Page ii Tuesday, August 23, 2005 5:04 AM

For Ranveig

Hetland_519XFront.fm Page iii Tuesday, August 23, 2005 5:04 AM

Hetland_519XFront.fm Page iv Tuesday, August 23, 2005 5:04 AM

v

Contents at a Glance

About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii

About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv

Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix

■CHAPTER 1 Instant Hacking: The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

■CHAPTER 2 Lists and Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

■CHAPTER 3 Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

■CHAPTER 4 Dictionaries: When Indices Won’t Do . . . . . . . . . . . . . . . . . . . . . . . . . . 67

■CHAPTER 5 Conditionals, Loops, and Some Other Statements . . . . . . . . . . . . . . 81

■CHAPTER 6 Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

■CHAPTER 7 More Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

■CHAPTER 8 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

■CHAPTER 9 Magic Methods, Properties, and Iterators . . . . . . . . . . . . . . . . . . . . 173

■CHAPTER 10 Batteries Included . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

■CHAPTER 11 Files and Stuff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

■CHAPTER 12 Graphical User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

■CHAPTER 13 Database Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

■CHAPTER 14 Network Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

■CHAPTER 15 Python and the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

■CHAPTER 16 Testing, 1-2-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

■CHAPTER 17 Extending Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

■CHAPTER 18 Packaging Your Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

■CHAPTER 19 Playful Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

■CHAPTER 20 Project 1: Instant Markup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

■CHAPTER 21 Project 2: Painting a Pretty Picture . . . . . . . . . . . . . . . . . . . . . . . . . . 411

■CHAPTER 22 Project 3: XML for All Occasions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

Hetland_519XFront.fm Page v Tuesday, August 23, 2005 5:04 AM

■CHAPTER 23 Project 4: In the News . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439

■CHAPTER 24 Project 5: A Virtual Tea Party . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

■CHAPTER 25 Project 6: Remote Editing with CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

■CHAPTER 26 Project 7: Your Own Bulletin Board . . . . . . . . . . . . . . . . . . . . . . . . . . 483

■CHAPTER 27 Project 8: File Sharing with XML-RPC . . . . . . . . . . . . . . . . . . . . . . . . 499

■CHAPTER 28 Project 9: File Sharing II—Now with GUI! . . . . . . . . . . . . . . . . . . . . 517

■CHAPTER 29 Project 10: Do-It-Yourself Arcade Game . . . . . . . . . . . . . . . . . . . . . . 527

■APPENDIX A The Short Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

■APPENDIX B Python Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557

■APPENDIX C Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571

■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575

Hetland_519XFront.fm Page vi Tuesday, August 23, 2005 5:04 AM

vii

Contents

About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii

About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv

Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix

■CHAPTER 1 Instant Hacking: The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Installing Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Linux and UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Macintosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Other Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Keeping In Touch and Up to Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

The Interactive Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

Algo . . . What? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Numbers and Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Large Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Hexadecimals and Octals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Getting Input from the User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

cmath and Complex Numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Back to the _ _future_ _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Saving and Executing Your Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Running Your Python Scripts from a Command Prompt . . . . . . . . . 20

Making Your Scripts Behave Like Normal Programs . . . . . . . . . . . . 21

Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

Contents

Hetland_519XFront.fm Page vii Tuesday, August 23, 2005 5:04 AM

309bf486554ecadb7baa4eaae4c03308

viii ■CONTENTS

Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Single-Quoted Strings and Escaping Quotes . . . . . . . . . . . . . . . . . . . 23

Concatenating Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

String Representations, str and repr. . . . . . . . . . . . . . . . . . . . . . . . . . 25

input vs. raw_input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Long Strings, Raw Strings, and Unicode . . . . . . . . . . . . . . . . . . . . . . 26

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

■CHAPTER 2 Lists and Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Common Sequence Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Slicing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Adding Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Multiplication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Membership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Length, Minimum, and Maximum. . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Lists: Python’s Workhorse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

The list Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Basic List Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

List Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Tuples: Immutable Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

The tuple Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

Basic Tuple Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

So What’s the Point? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

■CHAPTER 3 Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Basic String Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

String Formatting: The Short Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

String Formatting: The Long Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

Simple Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Width and Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Signs, Alignment, and Zero-Padding . . . . . . . . . . . . . . . . . . . . . . . . . 58

Hetland_519XFront.fm Page viii Tuesday, August 23, 2005 5:04 AM

■CONTENTS ix

String Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

lower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

replace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

split. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

strip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

translate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

■CHAPTER 4 Dictionaries: When Indices Won’t Do . . . . . . . . . . . . . . . . . . . . 67

But What Are They For? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Dictionary Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

The dict Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Basic Dictionary Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

String Formatting with Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Dictionary Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

fromkeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

has_key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

items and iteritems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

keys and iterkeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

popitem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

setdefault. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

values and itervalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Hetland_519XFront.fm Page ix Tuesday, August 23, 2005 5:04 AM

x ■CONTENTS

■CHAPTER 5 Conditionals, Loops, and Some Other Statements . . . . . . . 81

More About print and import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Printing with Commas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Importing Something As Something Else. . . . . . . . . . . . . . . . . . . . . . 82

Assignment Magic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

Sequence Unpacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

Chained Assignments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

Augmented Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

Blocks: The Joy of Indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

Conditions and Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

So That’s What Those Boolean Values Are For . . . . . . . . . . . . . . . . . 86

Conditional Execution and the if Statement. . . . . . . . . . . . . . . . . . . . 87

else Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

elif Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Nesting Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

More Complex Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

while Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

for Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

Iterating Over Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

Some Iteration Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

Breaking Out of Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

else Clauses in Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

List Comprehension—Slightly Loopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

And Three for the Road . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

Nothing Happened!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

Deleting with del . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

Executing and Evaluating Strings with exec and eval . . . . . . . . . . 104

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

■CHAPTER 6 Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Laziness Is a Virtue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Abstraction and Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

Creating Your Own Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Documenting Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Functions That Aren’t Really Functions . . . . . . . . . . . . . . . . . . . . . . 112

Hetland_519XFront.fm Page x Tuesday, August 23, 2005 5:04 AM

■CONTENTS xi

The Magic of Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Where Do the Values Come From? . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Can I Change a Parameter?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

Keyword Parameters and Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Collecting Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

Scoping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

Rebinding Global Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

Two Classics: Factorial and Power. . . . . . . . . . . . . . . . . . . . . . . . . . 130

Another Classic: Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

Throwing Functions Around . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

apply. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

■CHAPTER 7 More Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

The Magic of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Classes and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

What Is a Class, Exactly? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Making Your Own Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

Attributes, Functions, and Methods . . . . . . . . . . . . . . . . . . . . . . . . . 149

Throwing Methods Around. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

The Class Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Specifying a Superclass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

Investigating Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

Multiple Superclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

Interfaces and Introspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Some Thoughts on Object-Oriented Design . . . . . . . . . . . . . . . . . . . . . . 156

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Hetland_519XFront.fm Page xi Tuesday, August 23, 2005 5:04 AM

xii ■CONTENTS

■CHAPTER 8 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

What Is an Exception? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

Making Things Go Wrong . . . Your Way . . . . . . . . . . . . . . . . . . . . . . . . . . 160

The raise Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

Custom Exception Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Catching Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Look, Ma, No Arguments! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

More Than One except Clause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

Catching Two Exceptions with One Block . . . . . . . . . . . . . . . . . . . . . . . . 164

Catching the Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

A Real Catchall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

When All Is Well . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

And Finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Exceptions and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

The Zen of Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

■CHAPTER 9 Magic Methods, Properties, and Iterators . . . . . . . . . . . . . . 173

Before We Begin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

Overriding the Constructor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

Calling the Unbound Superclass Constructor . . . . . . . . . . . . . . . . . 177

Using the super Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

Item Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

The Basic Sequence and Mapping Protocol . . . . . . . . . . . . . . . . . . 180

Subclassing list, dict, and str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

More Magic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

The property Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

__getattr__, __setattr__, and Friends. . . . . . . . . . . . . . . . . . . . . . 188

Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

The Iterator Protocol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

Making Sequences from Iterators. . . . . . . . . . . . . . . . . . . . . . . . . . . 191

Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

Making a Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

A Recursive Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

Generators in General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

Avoiding Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

Hetland_519XFront.fm Page xii Tuesday, August 23, 2005 5:04 AM

■CONTENTS xiii

The Eight Queens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

The Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

State Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

Finding Conflicts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

The Base Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

The Recursive Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

Wrapping It Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

■CHAPTER 10 Batteries Included . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

Modules Are Programs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

Modules Are Used to Define Things . . . . . . . . . . . . . . . . . . . . . . . . . 205

Making Your Modules Available . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

Exploring Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

What’s in a Module?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

Getting Help with help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

Use the Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

The Standard Library: A Few Favorites . . . . . . . . . . . . . . . . . . . . . . . . . . 215

sys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

fileinput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

Sets, Heaps, and Deques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

random. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

shelve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

re . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Other Interesting Standard Modules. . . . . . . . . . . . . . . . . . . . . . . . . 251

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

Hetland_519XFront.fm Page xiii Tuesday, August 23, 2005 5:04 AM

xiv ■CONTENTS

■CHAPTER 11 Files and Stuff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

Opening Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

The Mode Argument. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

Buffering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

The Basic File Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

Reading and Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

Reading and Writing Lines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Closing Your Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

Iterating Over File Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

Doing It Byte by Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

One Line at a Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Reading Everything. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

Lazy Line Iteration with fileinput and xreadlines . . . . . . . . . . . . . . . 265

The New Kids on the Block: File Iterators . . . . . . . . . . . . . . . . . . . . 266

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

■CHAPTER 12 Graphical User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

An Example GUI Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

A Plethora of Platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

Downloading and Installing wxPython . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

Creating Windows and Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Labels and Positions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

More Intelligent Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

The Finished Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

But I’d Rather Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

Using Tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

Using Jython and Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

Using Something Else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

Hetland_519XFront.fm Page xiv Tuesday, August 23, 2005 5:04 AM

309bf486554ecadb7baa4eaae4c03308

Tải ngay đi em, còn do dự, trời tối mất!