71
Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational Science and Engineering

Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Embed Size (px)

Citation preview

Page 1: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Python Programming Techniques

Eliot Feibush

Zach Kaplan Bum Shik KimPrinceton Plasma Physics Laboratory

PICSciE

Princeton Institute for Computational Science and Engineering

Page 2: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

sample1.py

x = 0.xmax = 2.xincr = .1

while x < xmax: # Here is a block of code : y = x * x print (x, y) x += xincr

Page 3: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

sample2.py

s = “shrubbery”print (s)

print (type(s) )print (len(s) )

Page 4: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Example

No variable declaration.No memory allocation.

No compiling, no .o or .obj filesNo linking.

No kidding - Just run.

Page 5: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

python Runs your program

python sample1.py

sample1.py source code is run directly instead of compile, link, run

No .obj nor .o files of compiled code No .exe nor a.out of executable code

Page 6: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Interpreter

Arithmetic expressionsVariablesStringsListsimport math

Page 7: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

idle – Integrated Development Environment

Page 8: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

MacMagnifying glass: term

$ pythonor

$ idle_______________________________________

Windows (old school)Start Menu Search: cmd (opens a DOS window)

\python26\python.exe

Python 2.7 IDLE (Python GUI)

Page 9: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

idle

IDEColor-coded syntaxstatement completiondebugger

Written in Python with tkinter GUI module.

Page 10: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Try out the interpreter

$ python>>> 2+35>>> a = 5.1>>> b = 6.2>>> print (a*b)31.62

Page 11: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Variables

Case sensitiveStart with a letter, not a numberLong names OK

Page 12: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Types and Operatorsint# scalar variable, holds a single valuefloatlongcomplex a = (3 + 4j) # type(a)

+ - * / % // ** # Arithmetic operators

+=# Assignment operators-=*=/=

< <= > >= == != # Comparison operators+ # has magic overload abilities!

Page 13: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Casts

int()long()float()

hex() # string representationoct() # string representation

str() # for printing numbers + strings

Page 14: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Built-in ConstantsTrue <type ‘bool’>False <type

‘bool’>None <type

‘NoneType’>

Page 15: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

help() dir() type()

>>> help() # interpretorhelp> keywords # math, sys, os etc.

help> modules # works in 2.7 on nobel

help> topics # USE UPPER CASE

Page 16: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Indenting Counts!

Indent 4 spaces or a tab

: at end of line indicates start of code blockrequires next line to be indented

Code block ends with an outdent

Code runs but not as desired – check your indents

Page 17: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Program

LoopsConditionals, ControlFunctions

Page 18: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Keywords

Controlif else elif

while break continue

and or not

>>> help()help > keywords

Page 19: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

idle: File New Window Run Run Module

Page 20: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Mac

Magnifying glass: termcd Desktopcd PythonTools

TextEdit, vi, emacs, nano, Word (plain text)

python code.py

Page 21: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Windows

Edit your source code with NotepadOR

Right click on fileEdit with IDLE

brings up 2 windows:Python Shell – text outputEditor

Run Run Module runs your program

Page 22: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Windows – Old School

Start menuSearch: cmd

Opens a DOS window> notepad> \Python26\python.exe code.py

Page 23: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Programming Exercise

Write a python program that converts degrees to radians for:

0, 10, 20, 30, ... 180 degrees

edit deg.pypython deg.py

radians = degrees * pi / 180.print radians, degrees

Page 24: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Comments

in line text after # is ignored# can be in any column

Text within triple quotes“”” This is a multi-linecomment that will becompiled to a string but will not execute anything.It is code so it must conformto indenting ”””

Page 25: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Strings

Sequence of characters such as s = “abcdefg”Indexed with [ ] starting at 0.s[ -1 ] refers to last character in string.

Negative indexing starts at last character.Use s[p:q] for string slicing.

s[3:] evaluated as “defg”s[:3] evaluated as “abc”s[1:-2] evaluated as “bcde”

Page 26: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

String Concatenation

first = ‘John’last = ‘Cleese’

full = first + “ “ + last

sp = “ “full = first + sp + last

Page 27: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

+ Operator is Operand “Aware”

>>> “George” + “Washington” # concatenate

>>> 3 + 5 # addition

>>> 3 + “George” # unsupported type

>>> “George” + 3 # cannot concatenate

Page 28: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

The Immutable String

Can’t replace characters in a string.

s = “abcd”

s[1] = “g” Object does not support item assignment

s = “agcd” # re-assign entire string

Page 29: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Automatic Memory Managment

malloc() realloc() free()char name[32]

name = “as long as you want”

Page 30: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Printing

_ = “ “ # string variable named _

print (“hello” + _ + “there”)

___ = “ “ # will print 3 spaces

pi = 3.14159print (‘The answer is ‘ + str(pi)) # cast float to string to avoid type() error

Page 31: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Conditionals

a = 3

if a > 0: print (“a is positive”)elif a < 0: print( “a is negative”)else: print (“a = 0”)

Page 32: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

String Exercise

Degrees to radians:Print column titlesRight align degree valuesLimit radians to 7 characters

Reminder: len(s)

Page 33: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

str Under the Hoodstr - is a Class! Not just a memory area of characters

Object oriented programmingEncapsulated data and methodsUse the dot . to address methods and dataa = “hello”a.upper() # returns “HELLO”

type(a)dir(str)help(str)

hidden methods start with __

>>> help()help> topicshelp> STRINGMETHODS

Page 34: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Math module

import mathdir(math)

math.sqrt(x)math.sin(x)math.cos(x)

from math import *dir()

sqrt(x)

from math import pidir()

print pi

Page 35: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Includeimport from asreload()

Keywords

reload – debugging your own module from the interpreter

Page 36: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

import math Exercise

Degrees to radians and now cosine:Use math.pi for defined constantUse math.cos(radian) to compute cosinePrint cosine in 3rd column

Align cosine to decimal point(Do not truncate the

cosine)

Page 37: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

import

import math # knows where to find it

import syssys.path.append(“/u/efeibush/spline”)import cubic.py # import your own code

Page 38: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Collections - formerly known as Arrays

List [ ] # ordered sequence of stuff

tuple ( ) # n-tuple, immutable

Dictionary { } # key – value pairs

Page 39: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Lists [ ]

Python list is like an array in CIndexed from [0]Last index is length – 1

Class object with its own methods, e.g..append().sort() # provides min, max

Magic slice operator :Magic iter() function

Page 40: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Declare a List

x = [14, 23, 34, 42, 50, 59]

x.append(66) # works in place, no return

Identify the sequence?x.append(“Spring St”, “Canal St”)

x = [] # can append to empty listx = list()

Page 41: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

List methodsappend()extend()insert()remove()sort() # in place, does not return a new listreverse() # in placeindex()count()

cList = aList + bList # concatenate lists

Page 42: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

range() Function Returns a list

Returns list of integers, up to, but not including stop.

range() is a built-in function: dir(__builtins__)

range(stop) # assumes start=0 and incr=1range(start, stop) # assumes incr=1range(start, stop, incr)

Page 43: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Keywords

Looping with rangefor in

for i in range(10):

for i in dayList:

Page 44: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

numpy.linspace()

Returns list of evenly spaced floats

import numpy

a = numpy.linspace(1., 2., 11)

for i in a:

Page 45: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

List Techniques

d = range(4) # [0, 1, 2, 3]d = [0] * 4 #

[0, 0, 0, 0]

d = [ -1 for x in range(4) ]

# [-1, -1, -1, -1] List Comprehension

Page 46: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Lists Exercise

Degrees to radians, cosines, and now lists:Store a list of radians and a list of cosinesPrint the listsUse a range() loop instead of while

Page 47: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

List of Lists

d = [ [0]*4 for y in range(3) ]

[ [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]

]

d[2][0] = 5[

[0, 0, 0, 0],

[0, 0, 0, 0],

[5, 0, 0, 0]

]

Page 48: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

del keyword

del a[3] # deletes element from list

del a[2:4] # deletes element 2 and 3 # list slicing

del a # deletes entire list variable

Page 49: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Write a Text File

f = open("myfile.txt", "w")# open is a built-in function

a = 1b = 2

f.write("Here is line " + str(a) + "\n");f.write("Next is line " + str(b) + "\n");

f.close()# .write() and .close() are file object methods

Page 50: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Read a Text File

gFile = open("myfile.txt”, “r”)

for j in gFile: # python magic: text file iterates on lines print j # print each line

gFile.close()

see readsplit.py str.split() .split() method parses a line of text into list of words

Page 51: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Command Line Arguments

import sysprint (sys.argv)

sys.argv is a listsys.argv[0] has the name of the python file

Subsequent locations have command line args

>>> help(sys)

Page 52: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Shell Scriptingimport os

fileL = [] # set up a list

for f in os.listdir("."): if f.endswith(".py"): print( f ) fileL.append(f)

fileL.sort() # list function, sort in place

print (fileL)

# much better text handling than csh or bash; shell independent

import subprocess # Advanced# then use the Popen class for running programs

#!/bin/csh

foreach file (*.py)echo $fileend

Page 53: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Defining a Function

Block of code separate from main.

Define function before calling it.

def myAdd(a, b): # define before calling return a + b

p = 25 # main section of codeq = 30

r = myAdd(p, q) # case sensitive

Page 54: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Keywords

Subroutines (functions,methods)defreturn

Page 55: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Define a Function Exercise

Degrees to radians:Use math.pi for defined constantUse math.cos(radian) to compute cosinePrint cosine in 3rd column

Align cosine to decimal pointFormat the radians using a function call

Page 56: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

n-Tuple ( )

Immutable ListSaves some memoryCannot be modified when passed to subroutine

aTuple = tuple(aList) # Create from a list# No append, no assignment; Extract

slices OKcTuple = aTuple + bTuple # OK to concatenate

print aTuple[0] # reference using brackets

Page 57: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Dictionary { }Key : Value

Look up tableIndex by key -- Any immutable type

print d[key] # prints value for specified key

Order of key:value pairs is not guaranteed.Good for command line arguments

name list files, nicknames, etc.

d[key] = value # to add a key-value pair

Page 58: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Dictionary methods

eDict.update(gDict)

del eDict[key]

if key in eDict:print (eDict[key])

d.keys() # returns list of all keysd.items() # returns list of all

key:value pairs as tuples

Page 59: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Exception handlingtryexceptfinally

Keywords

Page 60: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Summary – Elements of Python

Numerical expressionsScalar variables, operatorsStrings - Class with methodsControlList [] tuple () dictionary {}Text File I/Oimport modules -- use functionsdef functionsComments, indenting

Page 61: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Built-in Classes

str, list, tuple, dict, file

dir(str)help(str)

hidden methods start with __

Page 62: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Built-in Functionslen()range() # returns a list [] of integerstype()raw_input() # read from standard inputopen() # file I/Ohelp() # interpreter

abs() round() complex()min() max() sum() pow()

dir() dir(__builtins__) e.g. help(raw_input)

Page 63: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Interpreter help()

>>> help() # go into help modehelp>

keywordstopics

# enter topic UPPER CASE

q>>>

Page 64: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Python at princeton.edu

ssh nobel.princeton.educompton% which python/usr/bin/python

version 2.6.6

/usr/bin/python2.7version 2.7.3

module load python

Page 65: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

More Info & Resources

python.orgdocs.python.org/2.7

princeton.edu/~efeibush/python

Princeton University Python Communityprincetonpy.com

Page 66: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Where to?

numpy – arrays & math functionsscipy – algorithms & math tools

Image Processingmatplotlib – draw graphsVisualization toolkit – python scriptingEclipse IDEMultiprocessingPython GPU, CUDAGUI – Tkinter, pyqt, wxpython

Page 67: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational
Page 68: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Graph Display -- ElVis APIimport platform # from python’s libraryimport elvispy # from current directory

host = platform.node() # get name of my computerport = 7654

s1 = elvispy.open_session(host, port) # connect to ElVis running on

# my computer, listening to default port

x = [1., 2., 3.] # list of x valuesy = [5., 10., 15.] # list of y values

elvispy.draw_graph(s1, x, y, "Hello", "My X", "My Y")

Page 69: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Display Data in ElVis Exercise

Double click on elvis.jar to run elvis.

Degrees to radians, cosines, Lists + ElVis display:Display cosine graph in ElVis

Use toelvis.py as a sample.

Page 70: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Art Contest

Write a pgm (world’s simplest) image file:Replace my line for a gradient with your

code to make an image.

Change maxIntensity to your scale.

Display your picture:python pgmdisplay.py

Page 71: Python Programming Techniques Eliot Feibush Zach Kaplan Bum Shik Kim Princeton Plasma Physics Laboratory PICSciE Princeton Institute for Computational

Reading a netCDF File

Structured, scientific data file formatCan read from URL

scipy – netcdf_file class for read/writenumpy – multi-dimensional data arrays