Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer...

70
Skriptsprachen Python Grundlagen Kai D¨ uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena [email protected] 21. September 2015 21. September 2015 1 / 70

Transcript of Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer...

Page 1: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

SkriptsprachenPython Grundlagen

Kai Duhrkop

Lehrstuhl fuer BioinformatikFriedrich-Schiller-Universitaet Jena

[email protected]

21. September 2015

21. September 2015 1 / 70

Page 2: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Python

Python Grundlagen Skriptsprachen 21. September 2015 2 / 70

Page 3: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Warum Python?

Javascript

Python Grundlagen Skriptsprachen 21. September 2015 3 / 70

Page 4: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Warum Python?

eine der am meisten genutzten Skriptsprachen

popular bei wissenschaftlichen Anwendungen

verbreitet in der”Linux Welt“

Python Grundlagen Skriptsprachen 21. September 2015 4 / 70

Page 5: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Wofur benutzt man Python?

ad-hoc & shell-skripte numerische & statistische Berechnungen, Plotten

Webapplikationen GUIs

Python Grundlagen Skriptsprachen 21. September 2015 5 / 70

Page 6: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Grober Ablauf des Pythonkurses

Grundlagen von Python

Umgang mit der Python-Shell

objektorientierte Programmierung

funktionale Programmierung

wissenschaftliches Arbeiten mit Python: numpy, scipy,scikit-learn, ...

plotten!

Datenformate: CSV, XML, JSON

Webanwendungen: REST, SOAP

Python Grundlagen Skriptsprachen 21. September 2015 6 / 70

Page 7: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Was ist eine Skriptsprache

REPL (read-eval-print-loop)

dynamische Typisierung

Interpreter statt Compiler

schwammige Definition. Grenzen zwischen Hoch- undSkriptsprachen verschwimmen zunehmend

Prototyping, Ad-hoc Skripte, Pipelines, GUIs,Webapplikationen

Python Grundlagen Skriptsprachen 21. September 2015 7 / 70

Page 8: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Was ist eine Skriptsprache

REPL (read-eval-print-loop)

dynamische Typisierung

Interpreter statt Compiler

schwammige Definition. Grenzen zwischen Hoch- undSkriptsprachen verschwimmen zunehmend

Prototyping, Ad-hoc Skripte, Pipelines, GUIs,Webapplikationen

Python Grundlagen Skriptsprachen 21. September 2015 8 / 70

Page 9: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

ipython

Python Grundlagen Skriptsprachen 21. September 2015 9 / 70

Page 10: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Was ist eine Skriptsprache

REPL (read-eval-print-loop)

dynamische Typisierung

Interpreter statt Compiler

schwammige Definition. Grenzen zwischen Hoch- undSkriptsprachen verschwimmen zunehmend

Prototyping, Ad-hoc Skripte, Pipelines, GUIs,Webapplikationen

Python Grundlagen Skriptsprachen 21. September 2015 10 / 70

Page 11: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Exkurs: Dynamische, aber starke Typisierung

x = 5# x ist vom Typ Integer

x = 5 . 0# nun ist x vom Typ Float

x = ”5”# folgendes ist beispielsweise nicht erlaubt

x + 1 # x ist ein String!

Python Grundlagen Skriptsprachen 21. September 2015 11 / 70

Page 12: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Was ist eine Skriptsprache

REPL (read-eval-print-loop)

dynamische Typisierung

Interpreter statt Compiler

schwammige Definition. Grenzen zwischen Hoch- undSkriptsprachen verschwimmen zunehmend

Prototyping, Ad-hoc Skripte, Pipelines, GUIs,Webapplikationen

Python Grundlagen Skriptsprachen 21. September 2015 12 / 70

Page 13: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Interpretierter Code

# this program won’t crash

i f 5 < 8 :p r i n t ” H a l l o Welt ”

e l s e :d i e seMethodeGibtEsDochGarNicht ( )

Python Grundlagen Skriptsprachen 21. September 2015 13 / 70

Page 14: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Python: Einfuhrung

Grundlegende Datenstrukturen

Kontrollstrukturen

Module

IO

Regulare Ausdrucke

Python Grundlagen Skriptsprachen 21. September 2015 14 / 70

Page 15: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Section 2

Grundlegende Datenstrukturen

Page 16: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Grundlegende Datenstrukturen

5 # Int

5 . 2 # Float

True , F a l s e # Booleans

”some S t r i n g ” # String

bytearray ( ” abc ” ) # bytearray

[ 1 , 2 , ”3” ] # Array

( 1 , 2 , ”3” ) # Tuple

{1 ,2 ,3} # Set

{”a” : 1 , ”b” : 2} # Dictionary

Grundlegende Datenstrukturen 21. September 2015 16 / 70

Page 17: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Grundlegende Datenstrukturen: Numerische Datentypen

x = 5 # int (darf beliebig gross sein)

y = 5 . 0 # float

x += 1 # wie gehabt

# aber keine Dekrement/Inkrement Operatoren!

# Python 2:

5 / 2 # ergibt 2

# Python 3:

5 / 2 # ergibt 2.5

# immer moeglich:

5 // 2 # ergibt 2

5 . 0 // 2 . 0 # ergibt 2.0

Grundlegende Datenstrukturen Numerische Typen 21. September 2015 17 / 70

Page 18: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Grundlegende Datenstrukturen: Numerische Datentypen

x = 3y = x∗∗2 # square of x

z = x∗∗(−2) # squareroot of x

abs (−5) # absolute

round ( 2 . 3 ) # 2.0

# additional functions in math module

import math

math . exp ( 5 ) # e**5

math . l o g ( 3 ) # logarithm

Grundlegende Datenstrukturen Numerische Typen 21. September 2015 18 / 70

Page 19: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Booleans

a = Trueb = F a l s ea == ba != b5 > 2# auch folgendes moeglich

5 < x < 9x < 5 and x < 9x == 1 or x == 2

Grundlegende Datenstrukturen Boolean 21. September 2015 19 / 70

Page 20: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Booleans

False, 0, 0.0, leere Sequenzen etc. zahlen als Unwahr

Logikoperatoren and und or sind lazy. D.h. sie evaluieren denzweiten Term nur, wenn das Ergebnis nicht schon nach demersten Term feststeht

# lazy Operatoren

x = True or d i e s e F u n k t i o n G i b t s N i c h t ( )

# R ckgabewert muss kein Boolean sein

y = 5 and ” H a l l o ” # y ist "Hallo"

Grundlegende Datenstrukturen Boolean 21. September 2015 20 / 70

Page 21: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Sequenztypen

a = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]b = ” xyz ”c = ( ”a” , ”b” , ” c ” )d = {1 , 2 , 3}

# pruefen ob Element enthalten ist

5 i n a #=> True

2 not in c #=> True

l en ( a ) # Laenge

max( a ) # groesstes Element

min ( a ) # kleinestes Element

a . count ( 2 ) # Anzahl der Vorkommen

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 21 / 70

Page 22: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

random-Access Sequenztypen

a = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]b = ” xyz ”c = ( ”a” , ”b” , ” c ” )

a . i n d e x ( 5 ) # index of 5 in a

# Elementzugriff

a [ 0 ] # erstes Element

b [−1] # letztes Element

b [−2] # vorletztes Element

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 22 / 70

Page 23: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

random-Access Sequenztypen

Slicing

a = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]b = ” xyz ”c = ( ”a” , ”b” , ” c ” )

c [ 0 : 2 ] # neues Tuple mit ersten Zwei Elementen

a [ 1 : −1 ] # neuer String ohne den ersten Buchstaben

a [ 0 : −1 : 2 ] # jedes zweite Element

b [ : ] # alle Elemente (Kopie)

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 23 / 70

Page 24: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

mutable Sequenztypen

a = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]b = {1 ,2 ,3}c = bytearray ( ) # mutable string type

# Konkatenation

a += [ 9 , 1 0 , 1 1 ]b += {4 , 5}c += ”some S t r i n g ”# Parameter darf beliebige Sequenz sein

a += ( 1 , 2 )b += [ 5 , 6 ]

# Element loeschen

a . pop ( )b . remove ( 2 )

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 24 / 70

Page 25: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

mutable random-access Sequenztypen

a = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]b = bytearray ( )

a . pop ( 2 ) # loesche drittes Element

del a [ 2 ] # Alternative

#slicing

a [ 0 : 3 ] = ( 5 , 6 , 7 ) # ersetze die ersten 3 Elemente

del b [ 0 : 3 ] # loesche die ersten 3 Elemente

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 25 / 70

Page 26: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

sets

A set is an unordered collection with no duplicate elements.

Set operations

s = {1 , 2 , 1 , 2 , 3} #elements: [1,2,3]

s = set ( [ 1 , 2 , 1 , 2 , 3 ] ) # the same

a | b #union: elem. in a or b

a & b #intersect: elem. a and b

a − b #difference: elem. in a but not in b

a ˆ b #complement: elem. a or b but not both

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 26 / 70

Page 27: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Strings

String Literale

normal = ” Ein S t r i n g ”unicode = u” Ein Unicode S t r i n g ” # python 2!

raw = r ” Ein S t r i n g \ t ohne S t e u e r z e i c h e n \n”m u l t i l i n e = ””” Einm e h r z e i l i g e rS t r i n g ”””

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 27 / 70

Page 28: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Strings

String Konkatenation

x = ” D i e s i s t e i n e ”x += ” t e u r e ”x += ” O p e r a t i o n ”# nutze stattdessen join:

x = ”” . j o i n ( [ x , ” e f f i z i e n t e ” , ” O p e r a t i o n ” ] )

bytearrays (weniger optimal)

x = bytearray ( ” D i e s i s t e i n e ” )x += ” e f f i z i e n t e ”x += ” O p e r a t i o n ”x = s t r ( x )

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 28 / 70

Page 29: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Strings

join und split

x s = [ ”1” , ”2” , ”3” ]s t r i n g = ” , ” . j o i n ( xs )#=> "1,2,3"

ys = s t r i n g . s p l i t ( ” , ” )xs == ys #=> True

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 29 / 70

Page 30: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Format String

C-Style Format String

”room %03d , d i s t a n c e %.2 f m” % ( 7 , 5 . 2 3 7 1 1 )#=> "room number 07, distance 5.24 m"

”%s s t r i n g s , %d i n t s , %f f l o a t s ” % ( ”a” , 3 , 3 . 7 )

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 30 / 70

Page 31: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Dictionaries

map = {”a” : 5 , ”b” : 8}map [ ”a” ] #=> 5

map [ ” c ” ] #=> wirft eine Exception!

# gibt den Wert fuer "c" zurueck, oder Default 0

map . g e t ( ” c ” , 0) #=> 0

map [ ” c ” ] = 7map . g e t ( ” c ” , 0) #=> 7

” c ” i n map #=> True

del map [ ”a” ] # loesche Element

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 31 / 70

Page 32: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Exkurs: Mutable und Immutable

x = [ 1 , 2 , 3 ]y = xx += [ 4 , 5 ]x #=> [1,2,3,4,5]

y #=> [1,2,3,4,5]

a = ” H a l l o ”b = aa += ” Welt ”a #=> "HalloWelt"

b #=> "Welt"

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 32 / 70

Page 33: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Exkurs: Dynamische, aber starke Typisierung

x = 5# x ist vom Typ Integer

x = 5 . 0# nun ist x vom Typ Float

x = ”5”# folgendes ist beispielsweise nicht erlaubt

x + 1 # x ist ein String!

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 33 / 70

Page 34: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Exkurs: Konvertierungsfunktionen

x = 5x = s t r ( 5 )

x = f l o a t ( x )x = i n t ( x )

x = bytearray ( ” Welt ” )x = set ( [ 1 , 2 , 3 , 4 ] )

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 34 / 70

Page 35: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Zusammenfassung

Typisierung

starke Typisierung (z.B. Integer ungleich Float)

mehrere Wahrheitswerte (0, [], , False sind unwahr)

Sequenztypen

Mutable und Immutable Sequenztypen

Random-Access (Liste, String) und Sets

teilen sich gemeinsame Funktionen

slicing!

dictionaries (Hashmaps). Vorsicht bei ungepruftem Zugriff

Grundlegende Datenstrukturen Sequenztypen 21. September 2015 35 / 70

Page 36: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Section 3

Kontrollstrukturen

Page 37: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Kontrollstrukturen

Bedingungen

Schleifen

Funktionen

Kontrollstrukturen 21. September 2015 37 / 70

Page 38: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Bedingungen

If-Bedinging

i f 3 < x < 8 :p r i n t x

e l i f x < 0 :p r i n t ” i s n e g a t i v e ”

e l s e :p r i n t ”x not i n ra ng e ”

python ist whitespace-sensitiv

keine Klammern oder Ends. Stattdessen: Einruckung

Einruckungen mussen innerhalb eines Files konsistent sein!

Empfohlen: 4 Leerzeichen, keine Tabs

Kontrollstrukturen Bedingungen 21. September 2015 38 / 70

Page 39: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Bedingungen

Ternarer Operator

x = 5 i f y < 0 e l s e −5

Kontrollstrukturen Bedingungen 21. September 2015 39 / 70

Page 40: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Schleifen

While-Schleife

whi le x < 5 :x += 1p r i n t x

For-Schleife

xs = [ 1 , 2 , 3 , 4 , 5 ]f o r x i n xs :

p r i n t x

Kontrollstrukturen Schleifen 21. September 2015 40 / 70

Page 41: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Schleifen

Iteriere Index-Wert Paare:

f o r i ndex , x i n enumerate ( [ 1 , 2 , 3 , 4 ] ) :p r i n t ”%d a t %d” % ( index , x )

Iteriere in Intervallen:

f o r i i n xrange ( 1 , 1 0 ) :p r i n t i # iteriere von 1 bis 9

Kontrollstrukturen Schleifen 21. September 2015 41 / 70

Page 42: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Schleifen

Iteriere uber Schlussel von Dictionaries:

y s = {”a” : 1 , ”b” : 2}f o r key i n ys :

p r i n t key

Iteriere Schlussel-Wert Paare:

f o r key , v a l u e i n ys . i t e r i t e m s ( ) :p r i n t ”%s i s key , %d i s v a l u e ” % ( key , v a l u e )

Kontrollstrukturen Schleifen 21. September 2015 42 / 70

Page 43: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Schleifen

break

f o r n i n range ( 2 , 1 0 ) :f o r x i n range ( 2 , n ) :

i f n % x == 0 :p r i n t ”%d = %d / %d” % ( n/x , n , x )break

e l s e :p r i n t ”%d i s a pr ime number” % n

else-Fall in Schleifen wird ausgefuhrt, wenn die Schleifeauslauft, nicht aber, wenn sie per break unterbrochen wird

Kontrollstrukturen Schleifen 21. September 2015 43 / 70

Page 44: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Funktionen

Funktionen definieren

def f i b o n a c c i ( x ) :i f x <= 1 :

return xreturn f i b o n a c c i ( x−1) + f i b o n a c c i ( x−2)

Kontrollstrukturen Funktionen 21. September 2015 44 / 70

Page 45: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Funktionen

lokale Funktionen definieren

def power ( a , b ) :def pow( a , b , acc ) :

i f b==0:return acc

e l s e :return pow( a , b−1, acc ∗a )

return pow( a , b , 1 )

Kontrollstrukturen Funktionen 21. September 2015 45 / 70

Page 46: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Tuple-Unpacking

Mehrere Ruckgabewerte

def divmod ( a , b ) :return ( a / b , a % b )

q u o t i e n t , r e s t = divmod ( a , b )

Parallelzuweisung

def f i b o n a c c i ( n ) :a = 1b = 1f o r i i n xrange ( 1 , n ) :

a , b = b , a+breturn a

Kontrollstrukturen Funktionen 21. September 2015 46 / 70

Page 47: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Zusammenfassung

Schleifen

for-Schleife am wichtigsten

xrange fur Intervalle, enumerate, iteritems

konsistente Einruckungen beachten

Funktionen

Mehrfache Ruckgabewerte uber Tuple

Parallelzuweisung/Tuple-unpacking

Kontrollstrukturen Funktionen 21. September 2015 47 / 70

Page 48: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Exkurs: Arbeiten mit ipython

mit ? und ?? am Ende eines Namens ruft Hilfe auf

Alternativ auch help(“begriff“)

Autovervollstandigung mit TAB

x.[TAB] listet alle Methoden von x auf

Kontrollstrukturen Funktionen 21. September 2015 48 / 70

Page 49: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Section 4

Module

Page 50: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Package Structure

package / #top level package

i n i t . pysubpackage / #subpackage

i n i t . pymodule . pymodule2 . py

a module is a python file

the interpreter interprets directories on the sys.path with aninit .py as package of modules

init .py is loaded first, may contain initialization code

Module Package structure 21. September 2015 50 / 70

Page 51: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Importing and using modules

import s y s #import sys module

from os import c h d i r #import chdir function

#from os module

c h d i r ( s y s . a r g v [ 1 ] )

module import: call functions/variables by module & name

function/variable import: call functions/variables by name

Module Importing modules 21. September 2015 51 / 70

Page 52: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

CAUTION!

from package import ∗

does not import all functions of a module!

imports functions defined in:

init .py

a l l = [ ’ f u n c t i o n ’ , ’ f u n c t i o n 2 ’ ]

Module Importing modules 21. September 2015 52 / 70

Page 53: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Zusammenfassung

Module

Importieren von Modulen und Paketen

from ... import * um mehrere Funktionen zu importieren

Viele Module in Standardbibliothek vorhanden!

Module Importing modules 21. September 2015 53 / 70

Page 54: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Section 5

IO

Page 55: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

raw input() reads strings

input() evaluates and casts input appropriately

We type ’42’:

a = raw input ( ) # a is the string ’42’

b = input ( ) # b is 42

IO Input 21. September 2015 55 / 70

Page 56: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

str() casts to ’human-readable’ string

repr() casts to ’computer-readable’ string

print implicitly uses str()

String representation

p r i n t 1 . 0 / 7 . 0 # ’0.142857142857’

p r i n t s t r ( 1 . 0 / 7 . 0 ) # ’0.142857142857’

p r i n t repr ( 1 . 0 / 7 . 0 ) # ’0.14285714285714285’

IO Output 21. September 2015 56 / 70

Page 57: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Files

Filehandles sind Betriebssystemressourcen, die angefordertund freigegeben werden mussen

Problem: Funktion darf zwischen Offnen und Schließen einerDatei nicht abbrechen

Losung: Das Offnen wird in einem with-Block durchgefuhrt.Am Ende des with-Blocks wird das Filehandle automatischwieder geschlossen

Reading a text file

l i n e s = [ ]w i t h open ( ” s o m e F i l e . t x t ” ) as f h a n d l e :

f o r l i n e i n f h a n d l e :l i n e s . append ( l i n e )

IO File 21. September 2015 57 / 70

Page 58: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Files

zwei Arten von Files: binary (b) und textfiles

modes: appending (a), writing (w), reading (r)

Beispiel: wb zum Schreiben eines binary files

+ Offnet eine Datei zum Lesen UND Schreiben. r+ startetam Anfang, a+ am Ende

Reading binary file

b y t e s = ””w i t h open ( ” s o m e F i l e . dat ” , ” rb ” ) as f h a n d l e :

b y t e s = f h a n d l e . r e a d ( )

IO File 21. September 2015 58 / 70

Page 59: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Files

Writing files

numbers = [ 1 , 2 , 3 , 4 ]w i t h open ( ” s o m e F i l e . t x t ” , ”w” ) as f h a n d l e :

f o r num i n numbers :f h a n d l e . w r i t e (num)

f h a n d l e . w r i t e ( ”\n” )

Appending to files

w i t h open ( ” s o m e F i l e . l o g ” , ”a” ) as f h a n d l e :f h a n d l e . w r i t e ( ”Some new e r r o r message\n” )

IO File 21. September 2015 59 / 70

Page 60: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Verzeichnisse

Ordnerinhalte listen

from g l o b import g l o b

f i l e s = g l o b ( ”/home/ k a i d u / . l o c a l /∗” )

Ordner anlegen

from os import pathfrom os import mkdir

i f not path . e x i s t s ( ” someDir ” ) :os . mkdir ( ” someDir ” )

IO File 21. September 2015 60 / 70

Page 61: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Zusammenfassung

IO

open in with Statement zum Offnen von Dateien

Dateien lassen sich leicht zeilenweise einlesen

os.path fur Funktionen um mit Dateipfaden zu arbeiten

os und darin enthaltene Module um auf Dateisystem zuoperieren

IO File 21. September 2015 61 / 70

Page 62: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Section 6

Regulare Audrucke

Page 63: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Regulare Audrucke

Kompilieren eines reg. Ausdrucks

import r er e g = r e . compile ( r ”my number i s (\d+)” )

Prufen ob ein Ausdruck matcht

r e g = r e . compile ( r ”my number i s (\d+)” )# matcht der Ausdruck von Beginn an?

i f r e g . match ( ”my number i s 123 ” )p r i n t ” T r e f f e r ”

# matche ersten Substring

match = r e g . s e a r c h ( ”Hi , my number i s 123 ” )i f match :

number = i n t ( match . group ( 1 ) )

Regulare Audrucke 21. September 2015 63 / 70

Page 64: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Regulare Audrucke

Substitution

r = r e . compile ( r ” [ a o u e i ] ” , r e . IGNORECASE)s t r = ” Ein Test ”r . sub ( ”∗” , s t r ) #=> "**n T*st"

Splitten

r = r e . compile ( r ”\ s ∗ ,\ s ∗” )s t r = ”a , b , c , d , e ”r . s p l i t ( s t r ) #=> ["a", "b", "c", "d", "e"]

Regulare Audrucke 21. September 2015 64 / 70

Page 65: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Regulare Audrucke

Iterieren uber mehrere Matches

r = r e . compile ( r ” (\d +)\ .\d+” )s t r = ” 5 . 4 und 2 . 6 , a b e r auch 3 . 1 ”f o r match i n r . f i n d i t e r ( s t r ) :

num = match . group ( 1 )p r i n t num

Regulare Audrucke 21. September 2015 65 / 70

Page 66: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Zusammenfassung

Regulare Ausdrucke

sind im Modul re definiert

selbe Syntax wie in Perl

am besten Raw-Strings benutzen um nicht alles zu escapen

Regulare Audrucke 21. September 2015 66 / 70

Page 67: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Section 7

Kommandozeilen Programme

Page 68: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Kommandozeilenprogramme

Main-Block

i f n a m e == ’ m a i n ’ :# ....

wird nur aufgerufen, wenn Skript direkt uber den PythonInterpreter gestartet wird

wird NICHT aufgerufen, wenn Modul innerhalb einer anderenLibrary geladen wird

Kommandozeilen Programme 21. September 2015 68 / 70

Page 69: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Kommandozeilenprogramme

Kommandozeilenargumente

import osi f n a m e == ’ m a i n ’ :

i f len ( os . a r g v ) < 3 :p r i n t ” e x p e c t 2 f i l e n a m e s as p ar am et e r ”e l s e :someMainFunct ion ( os . a r g v [ 1 ] , os . a r g v [ 2 ] )

os.argv enthalt Kommandozeilenargumente

erstes Element ist immer der Programmname

Kommandozeilen Programme 21. September 2015 69 / 70

Page 70: Skriptsprachen - Python Grundlagen · Skriptsprachen Python Grundlagen Kai D uhrkop Lehrstuhl fuer Bioinformatik Friedrich-Schiller-Universitaet Jena kai.duehrkop@uni-jena.de 21.

Kommandozeilenprogramme

Kommandozeilenargumente

python FILENAME # fuehrt Programm aus

python −c ”command” # fuehrt Python-Codezeile aus

Kommandozeilen Programme 21. September 2015 70 / 70