Click here to load reader

Python for Computational Science and Engineering fangohr/teaching/python/book/Python... · PDF filePython for Computational Science and Engineering ... 2.6 Impossible equations

  • View
    330

  • Download
    43

Embed Size (px)

Text of Python for Computational Science and Engineering...

  • 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 . . . . . . . . . . . . . . . . . . . . . . .

Search related