在好例子网,分享、交流、成长!
您当前所在位置:首页Python 开发实例Python语言基础 → Beginners Guide to Python 3 Programming(2019)(python 3编程初学者指南(2019))

Beginners Guide to Python 3 Programming(2019)(python 3编程初学者指南(2019))

Python语言基础

下载此实例
  • 开发语言:Python
  • 实例大小:29.05M
  • 下载次数:9
  • 浏览次数:32
  • 发布时间:2022-10-29
  • 实例类别:Python语言基础
  • 发 布 人:chasedream2022
  • 文件格式:.pdf
  • 所需积分:2
 相关标签: Programming python python GUIDE 2019

实例介绍

【实例简介】Beginners Guide to Python 3 Programming(2019)(python 3编程初学者指南(2019))

【实例截图】

【核心代码】

Contents
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 What Is Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Python Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Python Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Python Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Python Execution Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Running Python Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6.1 Interactively Using the Python Interpreter . . . . . . . . . 5
1.6.2 Running a Python File . . . . . . . . . . . . . . . . . . . . . . 6
1.6.3 Executing a Python Script . . . . . . . . . . . . . . . . . . . . 7
1.6.4 Using Python in an IDE . . . . . . . . . . . . . . . . . . . . . 9
1.7 Useful Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 Setting Up the Python Environment . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Check to See If Python Is Installed . . . . . . . . . . . . . . . . . . . . 13
2.3 Installing Python on a Windows PC . . . . . . . . . . . . . . . . . . . . 15
2.4 Setting Up on a Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 A First Python Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Interactive Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.4 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.5 Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.6 Assignment Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.7 Python Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.8 Comments in Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.9 Scripts Versus Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
xv
3.10 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4 Python Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 What Are Strings? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3 Representing Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4 What Type Is String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.5 What Can You Do with Strings? . . . . . . . . . . . . . . . . . . . . . . 35
4.5.1 String Concatenation . . . . . . . . . . . . . . . . . . . . . . . . 36
4.5.2 Length of a String . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.5.3 Accessing a Character . . . . . . . . . . . . . . . . . . . . . . . 36
4.5.4 Accessing a Subset of Characters . . . . . . . . . . . . . . . 37
4.5.5 Repeating Strings . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.5.6 Splitting Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.5.7 Counting Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.5.8 Replacing Strings . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.5.9 Finding Sub Strings . . . . . . . . . . . . . . . . . . . . . . . . 39
4.5.10 Converting Other Types into Strings . . . . . . . . . . . . 40
4.5.11 Comparing Strings . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.5.12 Other String Operations . . . . . . . . . . . . . . . . . . . . . 40
4.6 Hints on Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.6.1 Python Strings Are Case Sensitive . . . . . . . . . . . . . . 42
4.6.2 Function/Method Names . . . . . . . . . . . . . . . . . . . . . 42
4.6.3 Function/Method Invocations . . . . . . . . . . . . . . . . . . 42
4.7 String Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.8 String Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.9 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5 Numbers, Booleans and None . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2 Types of Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3 Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.3.1 Converting to Ints . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4 Floating Point Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4.1 Converting to Floats . . . . . . . . . . . . . . . . . . . . . . . . 54
5.4.2 Converting an Input String into a Floating Point
Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.5 Complex Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.6 Boolean Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.7 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.7.1 Integer Operations . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.7.2 Negative Number Integer Division . . . . . . . . . . . . . . 59
xvi Contents
5.7.3 Floating Point Number Operators . . . . . . . . . . . . . . . 60
5.7.4 Integers and Floating Point Operations . . . . . . . . . . . 60
5.7.5 Complex Number Operators . . . . . . . . . . . . . . . . . . 61
5.8 Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.9 None Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.10 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.11.1 General Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.11.2 Convert Kilometres to Miles . . . . . . . . . . . . . . . . . . 64
6 Flow of Control Using If Statements . . . . . . . . . . . . . . . . . . . . . . . . 65
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.2 Comparison Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.3 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.4 The If Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.4.1 Working with an If Statement . . . . . . . . . . . . . . . . . 67
6.4.2 Else in an If Statement . . . . . . . . . . . . . . . . . . . . . . 68
6.4.3 The Use of elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.5 Nesting If Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.6 If Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.7 A Note on True and False . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.8 Hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.9 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.10.1 Check Input Is Positive or Negative . . . . . . . . . . . . . 72
6.10.2 Test if a Number Is Odd or Even . . . . . . . . . . . . . . 73
6.10.3 Kilometres to Miles Converter . . . . . . . . . . . . . . . . . 73
7 Iteration/Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.2 While Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.3 For Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.4 Break Loop Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.5 Continue Loop Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.6 For Loop with Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7.7 A Note on Loop Variable Naming . . . . . . . . . . . . . . . . . . . . . 83
7.8 Dice Roll Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.9 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7.10.1 Calculate the Factorial of a Number . . . . . . . . . . . . . 84
7.10.2 Print All the Prime Numbers in a Range . . . . . . . . . 85
Contents xvii
8 Number Guessing Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.2 Setting Up the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.2.1 Add a Welcome Message . . . . . . . . . . . . . . . . . . . . 87
8.2.2 Running the Program . . . . . . . . . . . . . . . . . . . . . . . 88
8.3 What Will the Program Do? . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.4 Creating the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.4.1 Generate the Random Number . . . . . . . . . . . . . . . . . 90
8.4.2 Obtain an Input from the User . . . . . . . . . . . . . . . . . 91
8.4.3 Check to See If the Player Has Guessed the
Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
8.4.4 Check They Haven’t Exceeded Their Maximum
Number of Guess . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.4.5 Notify the Player Whether Higher or Lower . . . . . . . 93
8.4.6 End of Game Status . . . . . . . . . . . . . . . . . . . . . . . . 94
8.5 The Complete Listing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.6 Hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
8.6.1 Initialising Variables . . . . . . . . . . . . . . . . . . . . . . . . 96
8.6.2 Blank Lines Within a Block of Code . . . . . . . . . . . . 96
8.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
9 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
9.2 Recursive Behaviour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
9.3 Benefits of Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.4 Recursively Searching a Tree . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.5 Recursion in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9.6 Calculating Factorial Recursively . . . . . . . . . . . . . . . . . . . . . . 102
9.7 Disadvantages of Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.8 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
10 Introduction to Structured Analysis . . . . . . . . . . . . . . . . . . . . . . . . 107
10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
10.2 Structured Analysis and Function Identification . . . . . . . . . . . . 107
10.3 Functional Decomposition . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
10.3.1 Functional Decomposition Terminology . . . . . . . . . . 109
10.3.2 Functional Decomposition Process . . . . . . . . . . . . . . 110
10.3.3 Calculator Functional Decomposition Example . . . . . 110
10.4 Functional Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
10.5 Data Flow Diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
10.6 Flowcharts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
10.7 Data Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
10.8 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
xviii Contents
11 Functions in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
11.2 What Are Functions? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
11.3 How Functions Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
11.4 Types of Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
11.5 Defining Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
11.5.1 An Example Function . . . . . . . . . . . . . . . . . . . . . . . 120
11.6 Returning Values from Functions . . . . . . . . . . . . . . . . . . . . . . 121
11.7 Docstring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
11.8 Function Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
11.8.1 Multiple Parameter Functions . . . . . . . . . . . . . . . . . 124
11.8.2 Default Parameter Values . . . . . . . . . . . . . . . . . . . . 125
11.8.3 Named Arguments . . . . . . . . . . . . . . . . . . . . . . . . . 126
11.8.4 Arbitrary Arguments . . . . . . . . . . . . . . . . . . . . . . . . 127
11.8.5 Positional and Keyword Arguments . . . . . . . . . . . . . 128
11.9 Anonymous Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
11.10 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
11.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
12 Scope and Lifetime of Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
12.2 Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
12.3 The Global Keyword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
12.4 Nonlocal Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
12.5 Hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
12.6 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
12.7 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
13 Implementing a Calculator Using Functions . . . . . . . . . . . . . . . . . . 139
13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
13.2 What the Calculator Will Do . . . . . . . . . . . . . . . . . . . . . . . . . 139
13.3 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
13.4 The Calculator Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
13.5 Behaviour of the Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . 141
13.6 Identifying Whether the User Has Finished . . . . . . . . . . . . . . . 142
13.7 Selecting the Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
13.8 Obtaining the Input Numbers . . . . . . . . . . . . . . . . . . . . . . . . . 146
13.9 Determining the Operation to Execute . . . . . . . . . . . . . . . . . . 147
13.10 Running the Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
13.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
14 Introduction to Functional Programming . . . . . . . . . . . . . . . . . . . . 149
14.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
14.2 What Is Functional Programming? . . . . . . . . . . . . . . . . . . . . . 149
Contents xix
14.3 Advantages to Functional Programming . . . . . . . . . . . . . . . . . 151
14.4 Disadvantages of Functional Programming . . . . . . . . . . . . . . . 153
14.5 Referential Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
14.6 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
15 Higher Order Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
15.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
15.2 Recap on Functions in Python . . . . . . . . . . . . . . . . . . . . . . . . 157
15.3 Functions as Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
15.4 Higher Order Function Concepts . . . . . . . . . . . . . . . . . . . . . . 160
15.4.1 Higher Order Function Example . . . . . . . . . . . . . . . 161
15.5 Python Higher Order Functions . . . . . . . . . . . . . . . . . . . . . . . 162
15.5.1 Using Higher Order Functions . . . . . . . . . . . . . . . . . 163
15.5.2 Functions Returning Functions . . . . . . . . . . . . . . . . 164
15.6 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
15.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
16 Curried Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
16.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
16.2 Currying Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
16.3 Python and Curried Functions . . . . . . . . . . . . . . . . . . . . . . . . 168
16.4 Closures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
16.5 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
16.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
17 Introduction to Object Orientation . . . . . . . . . . . . . . . . . . . . . . . . . 175
17.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
17.2 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
17.3 What Are Classes for? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
17.3.1 What Should a Class Do? . . . . . . . . . . . . . . . . . . . . 177
17.3.2 Class Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 177
17.4 How Is an OO System Constructed? . . . . . . . . . . . . . . . . . . . 178
17.4.1 Where Do We Start? . . . . . . . . . . . . . . . . . . . . . . . . 179
17.4.2 Identifying the Objects . . . . . . . . . . . . . . . . . . . . . . 180
17.4.3 Identifying the Services or Methods . . . . . . . . . . . . . 181
17.4.4 Refining the Objects . . . . . . . . . . . . . . . . . . . . . . . . 182
17.4.5 Bringing It All Together . . . . . . . . . . . . . . . . . . . . . 183
17.5 Where Is the Structure in an OO Program? . . . . . . . . . . . . . . . 186
17.6 Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
18 Python Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
18.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
18.2 Class Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
18.3 Creating Examples of the Class Person . . . . . . . . . . . . . . . . . . 191
18.4 Be Careful with Assignment . . . . . . . . . . . . . . . . . . . . . . . . . 192
xx Contents
18.5 Printing Out Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
18.5.1 Accessing Object Attributes . . . . . . . . . . . . . . . . . . . 194
18.5.2 Defining a Default String Representation . . . . . . . . . 195
18.6 Providing a Class Comment . . . . . . . . . . . . . . . . . . . . . . . . . . 196
18.7 Adding a Birthday Method . . . . . . . . . . . . . . . . . . . . . . . . . . 197
18.8 Defining Instance Methods . . . . . . . . . . . . . . . . . . . . . . . . . . 198
18.9 Person Class Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
18.10 The del Keyword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
18.11 Automatic Memory Management . . . . . . . . . . . . . . . . . . . . . . 201
18.12 Intrinsic Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
18.13 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
18.14 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
19 Class Side and Static Behaviour . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
19.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
19.2 Class Side Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
19.3 Class Side Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
19.3.1 Why Class-Side Methods? . . . . . . . . . . . . . . . . . . . . 207
19.4 Static Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
19.5 Hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
19.6 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
19.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
20 Class Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
20.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
20.2 What Is Inheritance? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
20.3 Terminology Around Inheritance . . . . . . . . . . . . . . . . . . . . . . 215
20.4 The Class Object and Inheritance . . . . . . . . . . . . . . . . . . . . . . 217
20.5 The Built-in Object Class . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
20.6 Purpose of Subclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
20.7 Overriding Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
20.8 Extending Superclass Methods . . . . . . . . . . . . . . . . . . . . . . . . 221
20.9 Inheritance Oriented Naming Conventions . . . . . . . . . . . . . . . 222
20.10 Python and Multiple Inheritance . . . . . . . . . . . . . . . . . . . . . . 223
20.11 Multiple Inheritance Considered Harmful . . . . . . . . . . . . . . . . 225
20.12 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
20.13 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
20.14 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
21 Why Bother with Object Orientation? . . . . . . . . . . . . . . . . . . . . . . 233
21.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
21.2 The Procedural Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
21.2.1 Procedures for the Data Structure . . . . . . . . . . . . . . 234
21.2.2 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Contents xxi
21.3 Does Object Orientation Do Any Better? . . . . . . . . . . . . . . . . 235
21.3.1 Packages Versus Classes . . . . . . . . . . . . . . . . . . . . . 235
21.3.2 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
21.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
22 Operator Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
22.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
22.2 Operator Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
22.2.1 Why Have Operator Overloading? . . . . . . . . . . . . . . 241
22.2.2 Why Not Have Operator Overloading? . . . . . . . . . . . 242
22.2.3 Implementing Operator Overloading . . . . . . . . . . . . 242
22.3 Numerical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
22.4 Comparison Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
22.5 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
22.6 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
22.7 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
22.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
23 Python Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
23.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
23.2 Python Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
23.3 Setter and Getter Style Methods . . . . . . . . . . . . . . . . . . . . . . . 255
23.4 Public Interface to Properties . . . . . . . . . . . . . . . . . . . . . . . . . 256
23.5 More Concise Property Definitions . . . . . . . . . . . . . . . . . . . . . 258
23.6 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
23.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
24 Error and Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
24.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
24.2 Errors and Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
24.3 What Is an Exception? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
24.4 What Is Exception Handling? . . . . . . . . . . . . . . . . . . . . . . . . 265
24.5 Handling an Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
24.5.1 Accessing the Exception Object . . . . . . . . . . . . . . . . 269
24.5.2 Jumping to Exception Handlers . . . . . . . . . . . . . . . . 270
24.5.3 Catch Any Exception . . . . . . . . . . . . . . . . . . . . . . . 272
24.5.4 The Else Clause . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
24.5.5 The Finally Clause . . . . . . . . . . . . . . . . . . . . . . . . . 273
24.6 Raising an Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
24.7 Defining an Custom Exception . . . . . . . . . . . . . . . . . . . . . . . . 275
24.8 Chaining Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
24.9 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
24.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
xxii Contents
25 Python Modules and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
25.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
25.2 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
25.3 Python Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
25.4 Importing Python Modules . . . . . . . . . . . . . . . . . . . . . . . . . . 284
25.4.1 Importing a Module . . . . . . . . . . . . . . . . . . . . . . . . 284
25.4.2 Importing from a Module . . . . . . . . . . . . . . . . . . . . 285
25.4.3 Hiding Some Elements of a Module . . . . . . . . . . . . 287
25.4.4 Importing Within a Function . . . . . . . . . . . . . . . . . . 288
25.5 Module Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
25.6 Standard Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
25.7 Python Module Search Path . . . . . . . . . . . . . . . . . . . . . . . . . . 291
25.8 Modules as Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
25.9 Python Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
25.9.1 Package Organisation . . . . . . . . . . . . . . . . . . . . . . . 294
25.9.2 Sub Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
25.10 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
25.11 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
26 Abstract Base Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
26.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
26.2 Abstract Classes as a Concept . . . . . . . . . . . . . . . . . . . . . . . . 299
26.3 Abstract Base Classes in Python . . . . . . . . . . . . . . . . . . . . . . 300
26.3.1 Subclassing an ABC . . . . . . . . . . . . . . . . . . . . . . . . 300
26.3.2 Defining an Abstract Base Class . . . . . . . . . . . . . . . 302
26.4 Defining an Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
26.5 Virtual Subclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
26.6 Mixins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
26.7 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
26.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
27 Protocols, Polymorphism and Descriptors . . . . . . . . . . . . . . . . . . . . 311
27.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
27.2 Implicit Contracts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
27.3 Duck Typing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
27.4 Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
27.5 An Protocol Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
27.6 The Context Manager Protocol . . . . . . . . . . . . . . . . . . . . . . . 315
27.7 Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
27.8 The Descriptor Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
27.9 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
27.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Contents xxiii
28 Monkey Patching and Attribute Lookup . . . . . . . . . . . . . . . . . . . . . 325
28.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
28.2 What Is Monkey Patching? . . . . . . . . . . . . . . . . . . . . . . . . . . 325
28.2.1 How Does Monkey Patching Work? . . . . . . . . . . . . 326
28.2.2 Monkey Patching Example . . . . . . . . . . . . . . . . . . . 326
28.2.3 The Self Parameter . . . . . . . . . . . . . . . . . . . . . . . . . 327
28.2.4 Adding New Data to a Class . . . . . . . . . . . . . . . . . . 328
28.3 Attribute Lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
28.4 Handling Unknown Attribute Access . . . . . . . . . . . . . . . . . . . 331
28.5 Handling Unknown Method Invocations . . . . . . . . . . . . . . . . . 332
28.6 Intercepting Attribute Lookup . . . . . . . . . . . . . . . . . . . . . . . . 333
28.7 Intercepting Setting an Attribute . . . . . . . . . . . . . . . . . . . . . . . 334
28.8 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
28.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
29 Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
29.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
29.2 What Are Decorators? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
29.3 Defining a Decorator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
29.4 Using Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
29.5 Functions with Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
29.6 Stacked Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
29.7 Parameterised Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
29.8 Method Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
29.8.1 Methods Without Parameters . . . . . . . . . . . . . . . . . . 343
29.8.2 Methods with Parameters . . . . . . . . . . . . . . . . . . . . 344
29.9 Class Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
29.10 When Is a Decorator Executed? . . . . . . . . . . . . . . . . . . . . . . . 347
29.11 Built-in Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
29.12 FuncTools Wrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
29.13 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
29.14 Book Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
29.15 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
30 Iterables, Iterators, Generators and Coroutines . . . . . . . . . . . . . . . 353
30.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
30.2 Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
30.2.1 Iterables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
30.2.2 Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
30.2.3 The Iteration Related Methods . . . . . . . . . . . . . . . . . 354
30.2.4 The Iterable Evens Class . . . . . . . . . . . . . . . . . . . . . 354
30.2.5 Using the Evens Class with a for Loop . . . . . . . . . . 355
30.3 The Itertools Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
30.4 Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
xxiv Contents
30.4.1 Defining a Generator Function . . . . . . . . . . . . . . . . . 356
30.4.2 Using a Generator Function in a for Loop . . . . . . . . 357
30.4.3 When Do the Yield Statements Execute? . . . . . . . . . 357
30.4.4 An Even Number Generator . . . . . . . . . . . . . . . . . . 358
30.4.5 Nesting Generator Functions . . . . . . . . . . . . . . . . . . 358
30.4.6 Using Generators Outside a for Loop . . . . . . . . . . . . 359
30.5 Coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
30.6 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
30.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
31 Collections, Tuples and Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
31.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
31.2 Python Collection Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
31.3 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
31.3.1 Creating Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
31.3.2 The tuple() Constructor Function . . . . . . . . . . . . . . . 364
31.3.3 Accessing Elements of a Tuple . . . . . . . . . . . . . . . . 365
31.3.4 Creating New Tuples from Existing Tuples . . . . . . . 365
31.3.5 Tuples Can Hold Different Types . . . . . . . . . . . . . . 366
31.3.6 Iterating Over Tuples . . . . . . . . . . . . . . . . . . . . . . . 367
31.3.7 Tuple Related Functions . . . . . . . . . . . . . . . . . . . . . 367
31.3.8 Checking if an Element Exists . . . . . . . . . . . . . . . . . 368
31.3.9 Nested Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
31.3.10 Things You Can’t Do with Tuples . . . . . . . . . . . . . . 369
31.4 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
31.4.1 Creating Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
31.4.2 List Constructor Function . . . . . . . . . . . . . . . . . . . . 371
31.4.3 Accessing Elements from a List . . . . . . . . . . . . . . . . 372
31.4.4 Adding to a List . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
31.4.5 Inserting into a List . . . . . . . . . . . . . . . . . . . . . . . . 374
31.4.6 List Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . 374
31.4.7 Removing from a List . . . . . . . . . . . . . . . . . . . . . . . 375
31.4.8 The pop() Method . . . . . . . . . . . . . . . . . . . . . . . . . . 375
31.4.9 Deleting from a List . . . . . . . . . . . . . . . . . . . . . . . . 376
31.4.10 List Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
31.5 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
31.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
32 Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
32.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
32.2 Creating a Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
32.3 The Set() Constructor Function . . . . . . . . . . . . . . . . . . . . . . . 380
32.4 Accessing Elements in a Set . . . . . . . . . . . . . . . . . . . . . . . . . 380
32.5 Working with Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Contents xxv
32.5.1 Checking for Presence of an Element . . . . . . . . . . . . 380
32.5.2 Adding Items to a Set . . . . . . . . . . . . . . . . . . . . . . . 381
32.5.3 Changing Items in a Set . . . . . . . . . . . . . . . . . . . . . 381
32.5.4 Obtaining the Length of a Set . . . . . . . . . . . . . . . . . 382
32.5.5 Obtaining the Max and Min Values in a Set . . . . . . . 382
32.5.6 Removing an Item . . . . . . . . . . . . . . . . . . . . . . . . . 382
32.5.7 Nesting Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
32.6 Set Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
32.7 Set Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
32.8 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
32.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
33 Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
33.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
33.2 Creating a Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
33.2.1 The dict() Constructor Function . . . . . . . . . . . . . . . . 390
33.3 Working with Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
33.3.1 Accessing Items via Keys . . . . . . . . . . . . . . . . . . . . 391
33.3.2 Adding a New Entry . . . . . . . . . . . . . . . . . . . . . . . . 391
33.3.3 Changing a Keys Value . . . . . . . . . . . . . . . . . . . . . 391
33.3.4 Removing an Entry . . . . . . . . . . . . . . . . . . . . . . . . . 392
33.3.5 Iterating over Keys . . . . . . . . . . . . . . . . . . . . . . . . . 393
33.3.6 Values, Keys and Items . . . . . . . . . . . . . . . . . . . . . . 394
33.3.7 Checking Key Membership . . . . . . . . . . . . . . . . . . . 394
33.3.8 Obtaining the Length of a Dictionary . . . . . . . . . . . . 395
33.3.9 Nesting Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . 395
33.4 A Note on Dictionary Key Objects . . . . . . . . . . . . . . . . . . . . 396
33.5 Dictionary Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
33.6 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
33.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
34 Collection Related Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
34.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
34.2 List Comprehension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
34.3 The Collections Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
34.4 The Itertools Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
34.5 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
34.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
35 ADTs, Queues and Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
35.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
35.2 Abstract Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
35.3 Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
xxvi Contents
35.4 Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
35.4.1 Python List as a Queue . . . . . . . . . . . . . . . . . . . . . . 409
35.4.2 Defining a Queue Class . . . . . . . . . . . . . . . . . . . . . . 409
35.5 Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
35.5.1 Python List as a Stack . . . . . . . . . . . . . . . . . . . . . . 412
35.6 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
35.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
36 Map, Filter and Reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
36.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
36.2 Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
36.3 Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
36.4 Reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
36.5 Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
36.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
37 TicTacToe Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
37.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
37.2 Classes in the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
37.3 Counter Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
37.4 Move Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
37.5 The Player Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
37.6 The HumanPlayer Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
37.7 The ComputerPlayer Class . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
37.8 The Board Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
37.9 The Game Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
37.10 Running the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Correction to: Functions in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . C1

实例下载地址

Beginners Guide to Python 3 Programming(2019)(python 3编程初学者指南(2019))

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警