Beginning Python - Christophe Pallier's Blog

Transcription

Beginning PythonFrom Novice to Professional,Second Edition Magnus Lie Hetland

Beginning Python: From Novice to Professional, Second EditionCopyright 2008 by Magnus Lie HetlandAll 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 retrievalsystem, without the prior written permission of the copyright owner and the publisher.ISBN-13 (pbk): 978-1-59059-982-2ISBN-10 (pbk): 1-59059-982-9ISBN-13 (electronic): 978-1-4302-0634-7Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrenceof a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademarkowner, with no intention of infringement of the trademark.Lead Editor: Frank PohlmannTechnical Reviewers: Gregg Bolinger, Richard TaylorEditorial Board: Clay Andres, Steve Anglin, Ewan Buckingham, Tony Campbell, Gary Cornell, JonathanGennick, Matthew Moodie, Joseph Ottinger, Jeffrey Pepper, Frank Pohlmann, Ben Renow-Clarke,Dominic Shakeshaft, Matt Wade, Tom WelshProject Manager: Richard Dal PortoCopy Editor: Marilyn SmithAssociate Production Director: Kari Brooks-CoponyProduction Editor: Liz BerryCompositor: Pat ChristensonProofreader: April EddyIndexer: John CollinCover Designer: Kurt KramesManufacturing Director: Tom DebolskiDistributed 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 orders-ny@springer-sbm.com, orvisit http://www.springeronline.com.For information on translations, please contact Apress directly at 2855 Telegraph Avenue, Suite 600,Berkeley, CA 94705. Phone 510-549-5930, fax 510-549-5939, e-mail info@apress.com, or visit http://www.apress.com.Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use.eBook versions and licenses are also available for most titles. For more information, reference our SpecialBulk Sales–eBook Licensing web page at http://www.apress.com/info/bulksales.The information in this book is distributed on an “as is” basis, without warranty. Although every precautionhas been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability toany person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectlyby the information contained in this work.The source code for this book is available to readers at http://www.apress.com.

Contents at a GlanceAbout the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiiiAbout the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xxvPreface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxviiIntroduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxixiv CHAPTER 1Instant Hacking: The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 CHAPTER 2Lists and Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 CHAPTER 3Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 CHAPTER 4Dictionaries: When Indices Won’t Do . . . . . . . . . . . . . . . . . . . . . . . . . . 69 CHAPTER 5Conditionals, Loops, and Some Other Statements . . . . . . . . . . . . . . 83 CHAPTER 6Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 CHAPTER 7More Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 CHAPTER 8Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 CHAPTER 9Magic Methods, Properties, and Iterators . . . . . . . . . . . . . . . . . . . . . 175 CHAPTER 10Batteries Included . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 CHAPTER 11Files and Stuff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 CHAPTER 12Graphical User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 CHAPTER 13Database Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 CHAPTER 14Network Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 CHAPTER 15Python and the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 CHAPTER 16Testing, 1-2-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 CHAPTER 17Extending Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 CHAPTER 18Packaging Your Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 CHAPTER 19Playful Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 CHAPTER 20Project 1: Instant Markup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 CHAPTER 21Project 2: Painting a Pretty Picture . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 CHAPTER 22Project 3: XML for All Occasions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 CHAPTER 23Project 4: In the News . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

CHAPTER 24Project 5: A Virtual Tea Party . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 CHAPTER 25Project 6: Remote Editing with CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 CHAPTER 26Project 7: Your Own Bulletin Board . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 CHAPTER 27Project 8: File Sharing with XML-RPC . . . . . . . . . . . . . . . . . . . . . . . . 517 CHAPTER 28Project 9: File Sharing II—Now with GUI! . . . . . . . . . . . . . . . . . . . . . 537 CHAPTER 29Project 10: Do-It-Yourself Arcade Game . . . . . . . . . . . . . . . . . . . . . . 547 APPENDIX AThe Short Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 APPENDIX BPython Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 APPENDIX COnline Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 APPENDIX DPython 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607v

ContentsAbout the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiiiAbout the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvPreface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxviiIntroduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix CHAPTER 1Instant Hacking: The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1Installing Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Linux and UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Macintosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Other Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Keeping in Touch and Up-to-Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7The Interactive Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Algo . . . What? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Numbers and Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Large Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Hexadecimals and Octals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Getting Input from the User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17cmath and Complex Numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Back to the future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Saving and Executing Your Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Running Your Python Scripts from a Command Prompt. . . . . . . . . . 20Making Your Scripts Behave Like Normal Programs . . . . . . . . . . . . 20Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22vii

viii C O N T E N T S CHAPTER 2 CHAPTER 3Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Single-Quoted Strings and Escaping Quotes . . . . . . . . . . . . . . . . . . .Concatenating Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .String Representations, str and repr . . . . . . . . . . . . . . . . . . . . . . . . . .input vs. raw input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Long Strings, Raw Strings, and Unicode . . . . . . . . . . . . . . . . . . . . . . .A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222324242626293030Lists and Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31Sequence Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Common Sequence Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Slicing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Adding Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Multiplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Membership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Length, Minimum, and Maximum . . . . . . . . . . . . . . . . . . . . . . . . . . . .Lists: Python’s Workhorse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The list Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Basic List Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .List Methods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Tuples: Immutable Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The tuple Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Basic Tuple Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .So What’s the Point? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31323234373738404040414349505051515252Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53Basic String Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53String Formatting: The Short Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

C O N T E N T S CHAPTER 4 CHAPTER 5String Formatting: The Long Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Simple Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Width and Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Signs, Alignment, and Zero-Padding . . . . . . . . . . . . . . . . . . . . . . . . . .String Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .lower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .replace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .strip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .translate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .565757586060616263636464666667Dictionaries: When Indices Won’t Do . . . . . . . . . . . . . . . . . . . . . .69Dictionary Uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Creating and Using Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The dict Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Basic Dictionary Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .String Formatting with Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . .Dictionary Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .697071717374818181Conditionals, Loops, and Some Other Statements. . . . . . . .83More About print and import. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Printing with Commas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Importing Something As Something Else . . . . . . . . . . . . . . . . . . . . . .Assignment Magic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Sequence Unpacking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Chained Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Augmented Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83838485858787ix

x C O N T E N T SBlocks: The Joy of Indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Conditions and Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88So That’s What Those Boolean Values Are For . . . . . . . . . . . . . . . . . 89Conditional Execution and the if Statement . . . . . . . . . . . . . . . . . . . . 90else Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90elif Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Nesting Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91More Complex Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97while Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98for Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Iterating Over Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Some Iteration Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Breaking Out of Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102else Clauses in Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105List Comprehension—Slightly Loopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105And Three for the Road . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Nothing Happened! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Deleting with del . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Executing and Evaluating Strings with exec and eval . . . . . . . . . . . 108A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 CHAPTER 6Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113Laziness Is a Virtue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Abstraction and Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Creating Your Own Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Documenting Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Functions That Aren’t Really Functions . . . . . . . . . . . . . . . . . . . . . . .The Magic of Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Where Do the Values Come From? . . . . . . . . . . . . . . . . . . . . . . . . . .Can I Change a Parameter? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Keyword Parameters and Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . .Collecting Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Reversing the Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Parameter Practice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Scoping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113114115116117117118118123125128129131

C O N T E N T S CHAPTER 7 CHAPTER 8Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Two Classics: Factorial and Power. . . . . . . . . . . . . . . . . . . . . . . . . . .Another Classic: Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133134136139140140More Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141The Magic of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Encapsulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Classes and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .What Is a Class, Exactly? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Making Your Own Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Attributes, Functions, and Methods . . . . . . . . . . . . . . . . . . . . . . . . . .Privacy Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The Class Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Specifying a Superclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Investigating Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Multiple Superclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Interfaces and Introspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Some Thoughts on Object-Oriented Design . . . . . . . . . . . . . . . . . . . . . . . .A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59159Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161What Is an Exception? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Making Things Go Wrong . . . Your Way . . . . . . . . . . . . . . . . . . . . . . . . . . .The raise Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Custom Exception Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Catching Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Look, Ma, No Arguments! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .More Than One except Clause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Catching Two Exceptions with One Block . . . . . . . . . . . . . . . . . . . . .Catching the Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A Real Catchall. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161161162163163164165166166167xi

xii C O N T E N T SWhen All Is Well . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .And Finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Exceptions and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The Zen of Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CHAPTER 9Magic Methods, Properties, and Iterators168169170171173174174. . . . . . . . . . . . . . . 175Before We Begin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Overriding Methods in General, and the Constructorin Particular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Calling the Unbound Superclass Constructor . . . . . . . . . . . . . . . . . .Using the super Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Item Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The Basic Sequence and Mapping Protocol . . . . . . . . . . . . . . . . . . .Subclassing list, dict, and str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .More Magic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The property Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Static Methods and Class Methods . . . . . . . . . . . . . . . . . . . . . . . . . .getattr , setattr , and Friends . . . . . . . . . . . . . . . . . . . . . . .Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The Iterator Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Making Sequences from Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . .Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Making a Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .A Recursive Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Generators in General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Generator Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Simulating Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The Eight Queens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Generators and Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .State Representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Finding Conflicts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The Base Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The Recursive Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Wrapping It Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94195196197198199200200201202202203204205

C O N T E N T SA Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 CHAPTER 10 CHAPTER 11Batteries Included . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Modules Are Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Modules Are Used to Define Things . . . . . . . . . . . . . . . . . . . . . . . . . .Making Your Modules Available . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Exploring Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .What’s in a Module? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Getting Help with help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Use the Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .The Standard Library: A Few Favorites . . . . . . . . . . . . . . . . . . . . . . . . . . . .sys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .os . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Beginning Python From