Kompaktkurs Python Einführung in die Programmierung zur Numerik mit Python



Ähnliche Dokumente
Beispiel 19. December 4, 2009

Programmierkurs Python I

Funktionales Programmieren in Python

Python-Workshop. Python für C/C++ Programmierer. Carl Friedrich Bolz. Carl Friedrich Bolz

Funktionen in Python

Modul 122 VBA Scribt.docx

Informatik I: Einführung in die Programmierung 3. Werte, Typen, Variablen und Ausdrücke

Python Zahlen, Strings Logik Kontrollstrukturen. Scriptsprachen. Python Basics. Sascha Winter

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Erwin Grüner

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Grundlagen von Python

Programmierkurs Python I

Programmierkurs Java

Java Einführung Collections

Python Programmieren. Variablen, Ausdrücke und Anweisungen

Einführung in die Programmiertechnik

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018

Objektorientierung: Klassen und Objekte

Programmieren in Python

Algorithmik und Programmieren

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Nachtrag: Vergleich der Implementierungen von Stack

Objektorientierte Programmierung

Vorkurs C++ Programmierung

28. April Python ist eine Interpreter Sprache. einfach durch eigene C Module erweiterbar. Daten werden dynamisch getypt

Informatik I. Informatik I Iteratoren Generatoren Das Modul itertools. Iterierbare Objekte Iteratoren. Python-Interpreter

1 def Anweisung. 2 Argumentübergabe. 3 Lokale Variablen. 4 Default Argumente. 5 Aufruf mit Schlüsselwort. 6 Variable Argumente. Funktionen in Python

Funktionen in Python

Objektorientierte Programmierung OOP

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Die freie Programmiersprache Python mit Beispielen für ihren praktischen Einsatz. Python User Group Köln

Programmieren in Java

Kompetent objektorientiert programmieren

Programmierkurs Python II

Programmieren in Python

Java-Schulung Grundlagen

Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt kann man es direkt ausführen.

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

5. Tutorium zu Programmieren

Einführung in die Programmierung

Vererbung & Schnittstellen in C#

Programmierung in Python

Gebundene Typparameter

Programmierung I Einführung in Python, Beyond the Basics

Klassendefinitionen verstehen

Javakurs 2013 Objektorientierung

10 Objektorientierte Programmierung, Teil 1

Factory Method (Virtual Constructor)

Pythonkurs Sommersemester 2014 Einführung in die Programmierung zur Numerik mit Python. wissen leben WWU Münster

PHP Aufbaukurs. Tag 3. PHP5 & Klassen

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Programmierkurs Python I

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Funktionale Programmierung mit Haskell

Programmieren in Python

Client-Server-Beziehungen

Einführung in die Java- Programmierung

Programmierkurs Python I

Einführung in die Programmierung für Wirtschaftsinformatik

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Crashkurs Python und Sage U23 Krypto-Mission

Modellierung und Programmierung 1

Objektorientiertes JavaScript

Große Übung Praktische Informatik 1

Programmentwicklung ohne BlueJ

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

8 Zugriffstypen ( Zeiger )

Programmieren von Webinformationssystemen

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Besonderheiten von C#

Python zur Lösung von AvA Übung 1 VON MORITZ FEY

Objektorientierte Programmierung mit C++ Vector und List

Kurzanleitung um Transponder mit einem scemtec TT Reader und der Software UniDemo zu lesen

Einführung in die C-Programmierung

Kapitel MK:IV. IV. Modellieren mit Constraints

JSP JSTL. JEE Vorlesung Teil 6. Ralf Gitzel

Objektorientierte Programmierung

Dr. Monika Meiler. Inhalt

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Übersicht Programmablaufsteuerung

Algorithmen und Programmieren II Einführung in Python

KV Software Engineering Übungsaufgaben SS 2005

JavaScript in Drupal

Prinzipien Objektorientierter Programmierung

Einführung in OO PHP. Jan Burkl Solution Consultant Zend Technologies. All rights reserved. Zend Technologies, Inc.

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Objektorientierte Programmierung

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

Objektorientierte Programmierung

Transkript:

MÜNSTER Kompaktkurs Python Einführung in die Programmierung zur Numerik mit Python René Milk 09.-13. September 2013

Organisatorisches MÜNSTER Kompaktkurs Python 2 /50 Anwesenheit Scheine Login? Terminal Kate ipython-qtconsole

Material MÜNSTER Kompaktkurs Python 3 /50 http://www.diveintopython.net/ http://docs.python.org/2/reference/ https://en.wikibooks.org/wiki/non-programmer s_tutorial_for_python A Primer on Scientific Programming with Python, Hans Peter Langtangen, Springer 2011 http://docs.scipy.org/doc/numpy/reference/index.html http://wiki.scipy.org/tentative_numpy_tutorial http://www.engr.ucsb.edu/~shell/che210d/numpy.pdf http://community.linuxmint.com/tutorial/view/244

Sessions MÜNSTER Kompaktkurs Python 4 /50 Session 1: Python Basics I Vorbereitung praktischer Teil Session 2: Python Basics II Session 3: Generatoren, Lambdas, Comprehensions Session 4: Klassen, Kontextmanager Session 5: Vererbung, Scope, Codeorganisation Session 6: {Num,Sci}py Session 7: Magic

, Warum Python? MÜNSTER Kompaktkurs Python 5 /50 Open source Community driven development Multi purpose

, Python Fakten MÜNSTER Kompaktkurs Python 6 /50 Alles ist ein Objekt Whitespace ist wichtig dynamisch und stark typisiert

Python Basics I MÜNSTER Kompaktkurs Python 7 /50 Assignment, Typen x = 1 y = 1.0 if type(x)!= type(y): print( {} ungleich {}.format(type(x),type(y)) x *= 3 y = y + 1

Python Basics I MÜNSTER Kompaktkurs Python 8 /50 string literals # <-- leitet kommentare ein # mehrere Wege strings zu definieren spam = spam eggs = "eggs" both = """Spam n eggs""" # string objekte haben funktionen print(spam.to_upper()) print(both.split())

Python Basics I MÜNSTER Kompaktkurs Python 9 /50 Logik x, y = True, False n, m = None, 0 x or y x and y m is n n == None

Python Basics I MÜNSTER Kompaktkurs Python 10 /50 Eingebaute Typen l = list() l = [1, 2, list()] l[0] = l[1] d = dict() d = { key : value, 1: list() } d[ key ] = d[1] t = tuple() t = ( value, 1 ) t[0] # tuples sind immutable t[0] = t[1] # fehler s = set() s = set([1,2,2]) s == set([1,2,2,1,1])

Python Basics I MÜNSTER Kompaktkurs Python 11 /50 Funktionen I def summe(a, b): return a+b result = summe(1, 2) # funktionen sind auch objekte diff = summe result - diff(1, 2)

Python Basics I MÜNSTER Kompaktkurs Python 12 /50 Klassen I class MyClass(object): def init (self, msg): self._member = msg def some_funtion(self): print(self._member) obj = MyClass( spam ) obj.some_funtion() result - diff(1, 2)

, Kate I MÜNSTER Kompaktkurs Python 13 /50

, Kate II MÜNSTER Kompaktkurs Python 14 /50

Koans I MÜNSTER Kompaktkurs Python 15 /50 In Terminal cd git clone https://github.com/wwu-numerik/python_koans.git cd python_koans/python2./session.py 0

Koans II MÜNSTER Kompaktkurs Python 16 /50 class AboutAsserts(Koan): def test_assert_truth(self): """ We shall contemplate truth by testing reality, via asserts. """ # Confused? This video should help: # # http://bit.ly/about_asserts self.asserttrue(false) # This should be true def test_assert_with_message(self): """ Enlightenment may be more easily achieved with appropriate messages. """ self.asserttrue(false, "This should be true -- Please fix this") def test_fill_in_values(self): """ Sometimes we will ask you to fill in the values """ self.assertequal(, 1 + 1)

Python Basics II MÜNSTER Kompaktkurs Python 17 /50 Kontrollstrukturen I condition = True or False if condition: print( do_stuff ) elif 1 == 2: print( other_stuff ) else: print( rest ) while condition: # endlosschleife print( still running ) while condition: print( keine endlosschleife ) condition = not condition

Python Basics II MÜNSTER Kompaktkurs Python 18 /50 Kontrollstrukturen II zahlen = range(5) for item in zahlen: print( Durchlauf {}.format(item)) if item == 2: continue if item == 3: break dic = { blau : 1, rot : 2, gelb : 3 } for key, value in dic.items(): print( {} ist {} zugeordent.format(key, value))

Python Basics II MÜNSTER Kompaktkurs Python 19 /50 Exceptions def absolut(value): if value < 0: raise ValueError() a = int(raw_input("zahl: ")) try: absolut(a) except ValueError: print( eingabe zu klein ) except Exception as e: print( ein anderer fehler: + str(e)) finally: print( wird immer ausgefuehrt )

MÜNSTER Kompaktkurs Python 20 /50 Generatoren, Lambdas, Comprehensions Funktionen II def call_func(function, value=-2): return function(value) # uebergibt die built-in Funktion abs an call_func value = call_func(abs, -1) # value == 1 # mit default value = call_func(abs) # value == 2 # als keyword args value = call_func(value = -1, function = abs) # value == 1

MÜNSTER Kompaktkurs Python 21 /50 Generatoren, Lambdas, Comprehensions Iteratoren it = iter([1, 4, 9]) 1 == next(it) 4 == next(it) 9 == next(it) it.next() # StopIteration Exception

MÜNSTER Kompaktkurs Python 22 /50 Generatoren, Lambdas, Comprehensions Iteratorfunktionen def is_positive(value): return value > 0 def add(current_value, next_value): return current_value + next_value values = [ -1, 4, -9] absolute_values = map(abs, values) positive_values = filter(is_positive, values) # optionaler 3. parameter -> startwert summe = reduce(add, values)

MÜNSTER Kompaktkurs Python 23 /50 Generatoren, Lambdas, Comprehensions Comprehensions values = [ -1, 4, -9] # aequiv. zu map(abs, values) absolute_values = [abs(i) for i in values] # aequiv. zu filter(is_positive, values) positive_values = [i for i in values if i > 0] erste_liste = values zweite_liste = range(2) zusammen = [ wert_erste_liste + wert_zweite_liste for wert_erste_liste in erste_liste \ for wert_zweite_liste in zweite_liste] zusammen == [-1, 0, 4, 5, -9, -8] # entspricht zusammen = list() for wert_erste_liste in erste_liste: for wert_zweite_liste in zweite_liste: zusammen.append(wert_erste_liste + wert_zweite_liste)

MÜNSTER Kompaktkurs Python 24 /50 Generatoren, Lambdas, Comprehensions Lambda Funktionen values = [ -1, 4, -9] def is_positive_old(value): return value > 0 is_positive = lambda value: value > 0 is_positive(-1) positive_values = filter(is_positive, values) positive_values = filter(lambda n: n > 0, values)

MÜNSTER Kompaktkurs Python 25 /50 Generatoren, Lambdas, Comprehensions Generator expressions # liste absolute_values = [abs(i) for i in xrange(-10000000,10000000)] # vs. generator absolute_values_gen = (abs(i) for i in xrange(-10000000,10000000)) absolute_values == list(absolute_values_gen)

MÜNSTER Kompaktkurs Python 26 /50 Generatoren, Lambdas, Comprehensions Generator functions I def generator_function(end): i = 1 while i < end: yield i i *= i+2 generator_object = generator_function(3) next(generator_object) # 1 generator_object.next() # 3 next(generator_object) # StopIteration Exception

MÜNSTER Kompaktkurs Python 27 /50 Generatoren, Lambdas, Comprehensions Generator functions II def coroutine(start): end = 2 * start i = start while i < end: end = (yield i) or end i += 1 coroutine_object = coroutine(1) coroutine_object.next() coroutine_object.send(4) coroutine_object.next() coroutine_object.next()

MÜNSTER Kompaktkurs Python 28 /50 Klassen, Kontextmanager Funktionen III def outer_function(outer_arg): value = -(outer_arg) def inner_function(inner_arg): return inner_arg + value a = inner_function(0) b = inner_function(1) return a+b result = outer_function(2) # result == -3

MÜNSTER Kompaktkurs Python 29 /50 Klassen, Kontextmanager Klassen II class outer_class(object): def init (self): self._member_variable = 1 # _ -> "privat" class inner_class(object): class_level_member = 2 def report(self): print(self._member_variable) outer = outer_class() outer.report() inner = outer_class.inner_class() inner.class_level_member = 4 new_inner = outer_class.inner_class() print(new_inner.class_level_member) # weiterhin 2 outer_class.inner_class.class_level_member = 4 new_inner = outer_class.inner_class() print(new_inner.class_level_member) # jetzt 4

MÜNSTER Kompaktkurs Python 30 /50 Klassen, Kontextmanager Klassen III class Block(object): class_var = 1 @staticmethod def spam(some_paramter): # kein zugriff auf class_var oder _var return some_paramter+1 @classmethod def eggs(cls): return cls.class_var Block.spam(1) Block.eggs()

MÜNSTER Kompaktkurs Python 31 /50 Klassen, Kontextmanager Klassen IV class Block(object): class_var = 1 def init (self, var): self._var = var @property def size(self): return self._var * self.class_var @size.setter def size(self, value): self._var = value / self.class_var block_instance = Block(1) size = block_instance.size block_instance.size = 1

MÜNSTER Kompaktkurs Python 32 /50 Klassen, Kontextmanager Klassen V class Block(object): def init (self, var): self._var = var self.other_var = 0 block_instance = Block(4) a = block. dict [ other_var ] # a == 1 b = getattr(block, _var ) # b == 4

, MÜNSTER Kompaktkurs Python 33 /50 Klassen, Kontextmanager Kontextmanager I # eingebautes Beispiel: with open( ausgabe.txt, w ) as output_file: output_file.write( spam + eggs )

MÜNSTER Kompaktkurs Python 34 /50 Klassen, Kontextmanager Kontextmanager II # eigener context manager class Manager(object): def init (self, msg): self.msg = msg def enter (self): self.output = open( output.txt, w ) self.output.write( Enter + self.msg + \n ) return self.output def exit (self, type, value, traceback): self.output.write( Exit\n ) self.output.close() with Manager( spam ) as output_file: output_file.write( + eggs\n ) """output ist nun: Enter spam + eggs Exit """,

MÜNSTER Kompaktkurs Python 35 /50 Vererbung, Scope, Codeorganisation Einfache Vererbung I class BasisKlasse(object): def init (self, spam): self._spam = spam def report(self): print(self._spam) class AbgeleiteteKlasse(BasisKlasse): def init (self): super(abgeleiteteklasse, self). init ( eggs ) basis = BasisKlasse( spam ) abgeleitet = AbgeleiteteKlasse() basis.report() # -> spam abgeleitet.report() # -> eggs

MÜNSTER Kompaktkurs Python 36 /50 Vererbung, Scope, Codeorganisation Einfache Vererbung II class BasisKlasse(object): pass class AbgeleiteteKlasse(BasisKlasse): pass issubclass(abgeleiteteklasse, BasisKlasse) # True basis = BasisKlasse() abgeleitet = AbgeleiteteKlasse() isinstance(abgeleiteteklasse, BasisKlasse) # False isinstance(abgeleitet, BasisKlasse) # True isinstance(basis, BasisKlasse) # True

MÜNSTER Kompaktkurs Python 37 /50 Vererbung, Scope, Codeorganisation Mehrfache Vererbung class LinkeBasis(object): def shout(self): return links class RechteBasis(object): def shout(self): return rechts class LinksRechts(LinkeBasis, RechteBasis): pass class RechtsLinks(RechteBasis, LinkeBasis): pass lr = LinksRechts() rl = RechtsLinks() lr.shout() # -> links rl.shout() # -> rechts

MÜNSTER Kompaktkurs Python 38 /50 Vererbung, Scope, Codeorganisation imports # ------ other.py ------------------------------------ class Int(object):pass class Other(object):pass # ---------------------------------------------------- import other i = other.int() o = other.other() from other import Int, Other i = Int() o = Other()

MÜNSTER Kompaktkurs Python 39 /50 Vererbung, Scope, Codeorganisation Scope I (local scope) def some_function(): new_var = 9 if True: other_var = 1 # kontrollstrukturen erzeugen keinen lokalen scope print(other_var) # funktionenkoerper schon print(new_var) # NameError: name new_var is not defined

MÜNSTER Kompaktkurs Python 40 /50 Vererbung, Scope, Codeorganisation Modules/Packages mycode.py other_code.py paket_name/ init.py. library.py. # in mycode.py import other_code import paket_name k = other_code.someclass() p = paket_name.library.otherclass()

{Num,Sci}py MÜNSTER Kompaktkurs Python 41 /50 Arrays I import numpy as np a = np.array([1, 2, 3, 4]) a.shape == (4,) a.dtype == np.int64 a = np.array([[1, 2], [3, 4]]) a.shape == (2,2) a.dtype == np.int64 a = np.array([[1, 2], [3], [4]]) a.shape == (3,) a.dtype == object a = np.array([[[1.,2.], [4,5]], [[1,2], [4,5]]]) a.shape == (2,2,2) a.dtype == np.float

{Num,Sci}py MÜNSTER Kompaktkurs Python 42 /50 Arrays II import numpy as np np.ones((4,4), dtype=complex) np.zeros((3,3,3)) # numpy array-range works like builtin range np.arange(6) np.arange(1,6) np.arange(1,6,2) np.identity(2)

{Num,Sci}py MÜNSTER Kompaktkurs Python 43 /50 Slicing/Views import numpy as np ar = np.array([[1, 2], [3, 4], [5, 6]]) # array([[1, 2], # [3, 4], # [5, 6]]) ar[1,:] # [3,4] ar[:,1] # [2,4,6] ar[1:3,0] # [3,5]

{Num,Sci}py MÜNSTER Kompaktkurs Python 44 /50 Operationen import numpy as np a = np.random.rand(rows=10, cols=1) b = 2.0 # b wird broadcasted == in kompatible shape gebrachtet c = a * b # elementweise # broadcast regeln: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html c = a.dot(b) # skalarprodukt

{Num,Sci}py MÜNSTER Kompaktkurs Python 45 /50 Scipy Polynome, Quadraturen direkte und iterative Gleichungssystemlöser Matrixfaktorisierungen (LU, QR, SVD,... ) ODE Löser Sparse Matrizen und Löser Optimierung, FFT, Signalverarbeitung, Graphen, Raumgeometrie

{Num,Sci}py MÜNSTER Kompaktkurs Python 46 /50 Vektorisierung # Quelle: http://technicaldiscovery.blogspot.de/2011/06/speeding-up-python-numpy-cython-and.html def py_update(u): nx, ny = u.shape for i in xrange(1,nx-1): for j in xrange(1, ny-1): u[i,j] = ((u[i+1, j] + u[i-1, j]) * dy2 + (u[i, j+1] + u[i, j-1]) * dx2) / (2*(dx2+dy2)) def num_update(u): u[1:-1,1:-1] = ((u[2:,1:-1]+u[:-2,1:-1])*dy2 + (u[1:-1,2:] + u[1:-1,:-2])*dx2) / (2*(dx2+dy2)) def calc(n, Niter=100, func=py_update, args=()): u = zeros([n, N]) u[0] = 1 for i in range(niter): func(u,*args) return u # 100x100 Gitter: py_update 560s, num_update 2s

Magic MÜNSTER Kompaktkurs Python 47 /50 Monkeypatching ersetzen von Funktionalität zur Laufzeit alles ist ein Objekt, nichts ist const Funktionsreferenzen in Klassen, Modulen können ersetzt werden Sparsam einsetzen!

Magic MÜNSTER Kompaktkurs Python 48 /50 Funktionen IV auch Funktionen haben Attribute Memberfunktionen werden bei der Instanzierung einer Klasse an die Instanz gebunden im_self wird gesetzt

Magic MÜNSTER Kompaktkurs Python 49 /50 Decorators I Beispiel: property Mechanismus um automatisch Funktionalität um Funktionen herum hinzuzufügen Decorators können Klassen oder Funktionen sein Decorator Funktionen: Funktion als Argument Decorator Klassen haben call Operator der Funktion als Input nimmt beide geben ein neues Funktionsobject zurück

, Magic MÜNSTER Kompaktkurs Python 50 /50 Decorators II Real World Beispiel: https://github.com/pymor/pymor/blob/master/src/pymor/core/decorators.py