Click here to load reader
View
330
Download
43
Embed Size (px)
Introduction to
Python for Computational Science andEngineering
(A beginners guide)
Hans FangohrFaculty of Engineering and the Environment
University of Southampton
September 19, 2016
1
Contents
1 Introduction 71.1 Computational Modelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.1.2 Computational Modelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.1.3 Programming to support computational modelling . . . . . . . . . . . . . . . . 8
1.2 Why Python for scientific computing? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.1 Optimisation strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.2.2 Get it right first, then make it fast . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.2.3 Prototyping in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Literature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3.1 Recorded video lectures on Python for beginners . . . . . . . . . . . . . . . . . 111.3.2 Python tutor mailing list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Python version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.5 These documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6 Your feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 A powerful calculator 122.1 Python prompt and Read-Eval-Print Loop (REPL) . . . . . . . . . . . . . . . . . . . . . 122.2 Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 Integer division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.1 How to avoid integer division . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3.2 Why should I care about this division problem? . . . . . . . . . . . . . . . . . . 15
2.4 Mathematical functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.5 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5.1 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.6 Impossible equations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.6.1 The += notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3 Data Types and Data Structures 203.1 What type is it? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2 Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.1 Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.2.2 Integer limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.2.3 Floating Point numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.2.4 Complex numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.2.5 Functions applicable to all types of numbers . . . . . . . . . . . . . . . . . . . . 23
3.3 Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.3.1 Sequence type 1: String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.3.2 Sequence type 2: List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.3.3 Sequence type 3: Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.3.4 Indexing sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.3.5 Slicing sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.3.6 Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4 Passing arguments to functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.4.1 Call by value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.4.2 Call by reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.4.3 Argument passing in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.4.4 Performance considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2
3.4.5 Inadvertent modification of data . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.4.6 Copying objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.5 Equality and Identity/Sameness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.5.1 Equality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.5.2 Identity / Sameness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.5.3 Example: Equality and identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4 Introspection 434.1 dir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1.1 Magic names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.2 type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.3 isinstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.4 help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.5 Docstrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5 Input and Output 565.1 Printing to standard output (normally the screen) . . . . . . . . . . . . . . . . . . . . . 56
5.1.1 Simple print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.1.2 Formatted printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.1.3 str and __str__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.1.4 repr and __repr__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595.1.5 New-style string formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.1.6 Changes from Python 2 to Python 3: print . . . . . . . . . . . . . . . . . . . . 61
5.2 Reading and writing files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625.2.1 File reading examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6 Control Flow 646.1 Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.1.1 Conditionals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646.2 If-then-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666.3 For loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676.4 While loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686.5 Relational operators (comparisons) in if and while statements . . . . . . . . . . . . . 686.6 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.6.1 Raising Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.6.2 Creating our own exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726.6.3 LBYL vs EAFP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7 Functions and modules 737.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737.2 Using functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737.3 Defining functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747.4 Default values and optional parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . 767.5 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.5.1 Importing modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777.5.2 Creating modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787.5.3 Use of __name__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797.5.4 Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797.5.5 Example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3
8 Functional tools 818.1 Anonymous functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818.2 Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828.3 Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838.4 List comprehension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838.5 Reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858.6 Why not just use for-loops? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878.7 Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
9 Common tasks 909.1 Many ways to compute a series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909.2 Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
9.2.1 Efficiency . . . . . . . . . . . . . . . . . . . . . . .