Beginning Python - From Novice to Professional

Beginning Python - From Novice to Professional Beginning Python - From Novice to Professional

16.01.2014 Views

■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

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

■CONTENTS<br />

xi<br />

The Magic of Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113<br />

Where Do the Values Come <strong>From</strong>? . . . . . . . . . . . . . . . . . . . . . . . . . . 113<br />

Can I Change a Parameter?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114<br />

Keyword Parameters and Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . 119<br />

Collecting Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121<br />

Scoping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />

Rebinding Global Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />

Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

Two Classics: Fac<strong>to</strong>rial and Power . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

Another Classic: Binary Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131<br />

Throwing Functions Around . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133<br />

map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134<br />

filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134<br />

reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135<br />

apply. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137<br />

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137<br />

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138<br />

What Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138<br />

■CHAPTER 7 More Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139<br />

The Magic of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139<br />

Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140<br />

Encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143<br />

Inheritance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146<br />

Classes and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147<br />

What Is a Class, Exactly? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147<br />

Making Your Own Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />

Attributes, Functions, and Methods . . . . . . . . . . . . . . . . . . . . . . . . . 149<br />

Throwing Methods Around. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150<br />

The Class Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151<br />

Specifying a Superclass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153<br />

Investigating Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153<br />

Multiple Superclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154<br />

Interfaces and Introspection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155<br />

Some Thoughts on Object-Oriented Design . . . . . . . . . . . . . . . . . . . . . . 156<br />

A Quick Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157<br />

New Functions in This Chapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158<br />

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!