ebook img

Python 3 patterns,recipes,and idioms PDF

301 Pages·0.996 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Python 3 patterns,recipes,and idioms

Python 3 Patterns, Recipes and Idioms Release 1.0 Bruce Eckel December31,2008 CONTENTS 1 Contributors 1 1.1 ThanksTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 ToDoList 3 3 Theremainderarefromcontext,fromthebook. 5 4 ANoteToReaders 7 5 Introduction 9 5.1 ATeamEffort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.2 NotanIntroductoryBook . . . . . . . . . . . . . . . . . . . . . . . . 10 5.3 TheLicense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5.4 ThePrintedBook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 5.5 Translations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 5.6 MyMotives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 6 TeachingSupport 13 7 BookDevelopmentRules 15 7.1 ContributeWhatYouCan . . . . . . . . . . . . . . . . . . . . . . . . 15 7.2 Don’tGetAttached. . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 7.3 Credit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 7.4 Mechanics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 i 7.5 Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 8 DeveloperGuide 21 8.1 GettingStarted: TheEasiestApproach . . . . . . . . . . . . . . . . 21 8.2 ForWindowsUsers . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 8.3 InstallingSphinx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 8.4 GettingtheDevelopmentBranchoftheBook. . . . . . . . . . . . . 23 8.5 BuildingtheBook . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 8.6 BuildingthePDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 8.7 SettingupMercurial . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 8.8 WorkingwithBitBucketandMercurial . . . . . . . . . . . . . . . . 25 8.9 ASimpleOverviewOfEditingandMerging . . . . . . . . . . . . . 27 8.10 EmacsforEditingRestructuredText . . . . . . . . . . . . . . . . . . 27 9 PartI:Foundations 31 10 QuickPythonforProgrammers 33 10.1 Scriptingvs. Programming . . . . . . . . . . . . . . . . . . . . . . . 34 10.2 Built-InContainers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 10.3 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 10.4 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 10.5 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 11 UnitTesting&Test-DrivenDevelopment 43 11.1 WriteTestsFirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 11.2 SimplePythonTesting . . . . . . . . . . . . . . . . . . . . . . . . . . 46 11.3 AVerySimpleFramework . . . . . . . . . . . . . . . . . . . . . . . 47 11.4 WritingTests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 11.5 White-Box&Black-BoxTests . . . . . . . . . . . . . . . . . . . . . . 51 11.6 Runningtests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 11.7 AutomaticallyExecutingTests . . . . . . . . . . . . . . . . . . . . . 55 11.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 12 Python3LanguageChanges 57 13 Decorators 59 13.1 Decoratorsvs. theDecoratorPattern. . . . . . . . . . . . . . . . . . 59 13.2 HistoryofMacros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 13.3 TheGoalofMacros. . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 13.4 WhatCanYouDoWithDecorators? . . . . . . . . . . . . . . . . . . 61 ii 13.5 FunctionDecorators . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 13.6 SlightlyMoreUseful . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 13.7 UsingFunctionsasDecorators . . . . . . . . . . . . . . . . . . . . . 64 13.8 Review: DecoratorswithoutArguments . . . . . . . . . . . . . . . 66 13.9 DecoratorswithArguments. . . . . . . . . . . . . . . . . . . . . . . 67 13.10 DecoratorFunctionswithDecoratorArguments . . . . . . . . . . . 69 13.11 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 14 Generators,Iterators,andItertools 73 15 Comprehensions 75 15.1 AMoreComplexExample . . . . . . . . . . . . . . . . . . . . . . . 75 16 Coroutines&Concurrency 81 16.1 FurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 17 Jython 83 17.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 17.2 Scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 17.3 InterpreterMotivation . . . . . . . . . . . . . . . . . . . . . . . . . . 87 17.4 UsingJavalibraries. . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 17.5 ControllingJavafromJython . . . . . . . . . . . . . . . . . . . . . . 93 17.6 ControllingtheInterpreter . . . . . . . . . . . . . . . . . . . . . . . 97 17.7 CreatingJavaclasseswithJython . . . . . . . . . . . . . . . . . . . 107 17.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 17.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 18 PartII:Idioms 117 19 DiscoveringtheDetailsAboutYourPlatform 119 20 ACanonicalFormforCommand-LinePrograms 121 21 Messenger/DataTransferObject 123 22 PartIII:Patterns 125 23 ThePatternConcept 127 23.1 WhatisaPattern? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 23.2 ClassifyingPatterns . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 iii 23.3 PatternTaxonomy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 23.4 DesignStructures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 23.5 DesignPrinciples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 24 TheSingleton 135 24.1 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 25 BuildingApplicationFrameworks 143 25.1 TemplateMethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 25.2 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 26 FrontingforanImplementation 145 26.1 Proxy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 26.2 State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 27 StateMachine 151 27.1 Table-DrivenStateMachine . . . . . . . . . . . . . . . . . . . . . . . 158 27.2 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 27.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 28 Decorator: DynamicTypeSelection 171 28.1 BasicDecoratorStructure . . . . . . . . . . . . . . . . . . . . . . . . 172 28.2 ACoffeeExample . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 28.3 ClassforEachCombination . . . . . . . . . . . . . . . . . . . . . . . 173 28.4 TheDecoratorApproach . . . . . . . . . . . . . . . . . . . . . . . . 175 28.5 Compromise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 28.6 OtherConsiderations . . . . . . . . . . . . . . . . . . . . . . . . . . 181 28.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 29 Iterators: DecouplingAlgorithmsfromContainers 183 29.1 Type-SafeIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 30 Factory: EncapsulatingObjectCreation 187 30.1 SimpleFactoryMethod . . . . . . . . . . . . . . . . . . . . . . . . . 188 30.2 PolymorphicFactories . . . . . . . . . . . . . . . . . . . . . . . . . . 191 30.3 AbstractFactories . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 30.4 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 31 FunctionObjects 199 31.1 Command: ChoosingtheOperationatRuntime . . . . . . . . . . . 199 iv 31.2 Strategy: ChoosingtheAlgorithmatRuntime . . . . . . . . . . . . 201 31.3 ChainofResponsibility . . . . . . . . . . . . . . . . . . . . . . . . . 202 31.4 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 32 ChangingtheInterface 207 32.1 Adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 32.2 Façade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 32.3 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 33 Table-DrivenCode: ConfigurationFlexibility 211 33.1 Table-DrivenCodeUsingAnonymousInnerClasses . . . . . . . . 211 34 Observer 213 34.1 ObservingFlowers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 35 MultipleDispatching 231 36 Visitor 237 36.1 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 37 PatternRefactoring 241 37.1 SimulatingtheTrashRecycler . . . . . . . . . . . . . . . . . . . . . 241 37.2 ImprovingtheDesign . . . . . . . . . . . . . . . . . . . . . . . . . . 245 37.3 APatternforPrototypingCreation. . . . . . . . . . . . . . . . . . . 249 37.4 AbstractingUsage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 37.5 MultipleDispatching . . . . . . . . . . . . . . . . . . . . . . . . . . 262 37.6 TheVisitorPattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 37.7 RTTIConsideredHarmful? . . . . . . . . . . . . . . . . . . . . . . . 279 37.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 37.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 38 Projects 285 38.1 Rats&Mazes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 39 Indicesandtables 291 Index 293 v vi CHAPTER ONE CONTRIBUTORS Listofcontributors. Note: Thisneedssomethought. Iwanttoincludeeveryonewhomakesacon- tribution,butI’dalsoliketoindicatepeoplewhohavemadelargercontributions –there’snoautomaticwaytodothisnowthatwehavemovedtoBitBucketand areusingWikistoallowpeopletomakecontributionsmoresimplyinthebegin- ning. 1.1 Thanks To • BitBucket.organdthecreatorsofMercurial • Creator(s)ofSphinx • And of course, Guido and the team for their incessant improvement of Python, especially for taking the risk in breaking backward compatibility inPython3.0torefactorthelanguage. Todo Yarko(examplelabelofToDo): • updateCSSstylesfortodo’s&todolists; 1 Python3Patterns,RecipesandIdioms,Release1.0 • lookathttp://sphinx.pocoo.org/ext/coverage.htmlforexample. • AutogeneratedToDoListsdonotappearinLaTeXoutput-debug,fix; • DONE: - ToDo does not appear to be created by make dependencies (it’s autogenerated);-updateMakefiletoalwaysre-generatetodolists; 2 Chapter1. Contributors

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.