5 Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn 8 © Peter Pfahler, Michael Thies, Universität Paderborn 8. Python Entwickelt seit 1990 von Guido van Rossum am Centrum voor Wiskunde en Informatica in Amsterdam. Entwicklungsziele: Einfach und übersichtlich => recht reduzierte Syntax Multi-paradigm => Unterstützung von Prozeduraler / strukturierter Objektorientierter Funktionaler Aspekt-orientierter Programmierung Open Source Guter Einstieg: http://docs.python.org/tutorial/ © Peter Pfahler, Michael Thies, Universität Paderborn 8-2 Spracheigenschaften von Python Blockklammerung durch Einrückung Dynamische Typisierung Keine implizite Typanpassung zwischen verschiedenartigen Typen (String/int) Objektorientierung mit Mehrfacherbung Modularisierung Ausnahmebehandlung Generatoren und Listen-Manipulation © Peter Pfahler, Michael Thies, Universität Paderborn 8-3 Python in Beispielen Blockklammerung durch Einrückung REFRAIN = ''' %d bottles of beer on the wall, %d bottles of beer, take one down, pass it around, %d bottles of beer on the wall! ''' bottles_of_beer = 99 while bottles_of_beer > 1: print REFRAIN % (bottles_of_beer, bottles_of_beer, bottles_of_beer ­ 1) bottles_of_beer ­= 1 © Peter Pfahler, Michael Thies, Universität Paderborn 8-4 Python in Beispielen Definition von Funktionen def fib(n): # write Fibonacci series up to n """Print a Fibonacci series up to n.""" a, b = 0, 1 while b < n: print b a, b = b, a+b # Now call the function we just defined: fib(2000) Schlüssel-Parameter (keyword arguments) def setme(val, state='start'): Print 'state ', state, ' ', val # call the function: setme(12) setme(16,'end') setme(state='s2', val='fifty') © Peter Pfahler, Michael Thies, Universität Paderborn 8-5 Python in Beispielen Listen und Dictionaries obst = ['apfel', 'birne', 'banane', 'kirsche'] obst[1]=100 obst[1] = ['pflaume', 'aprikose'] obst[­2] = 'erdbeere' obst[1:­1] = [] print obst tel = {'heinz': 4098, 'anne': 4139} tel['guido'] = 4127 print tel['heinz'] del tel['anne'] print tel.keys() print 'guido' in tel © Peter Pfahler, Michael Thies, Universität Paderborn 8-6 Python in Beispielen Generator-Ausdrücke (list comprehension) vec = [2, 4, 6] print [3*x for x in vec] print [3*x for x in vec if x > 3] prices = {'apple': 0.40, 'banana': 0.50} my_purchase = { 'apple': 1, 'banana': 6} grocery_bill = sum(prices[fruit] * my_purchase[fruit] for fruit in my_purchase) print 'I owe the grocer $%.2f' % grocery_bill © Peter Pfahler, Michael Thies, Universität Paderborn 8-7 Python in Beispielen Funktionale Programmierung mit Listen (filter, reduce, map) def f(x): return x % 2 != 0 and x % 3 != 0 print filter(f, range(2, 25)) def add(x,y): return x+y print reduce(add, range(1, 11)) # mit Startwert für den akkumulierenden Parameter seq=[] print reduce(add, seq, 0) def cube(x): return x*x*x print map(cube, range(1, 6)) © Peter Pfahler, Michael Thies, Universität Paderborn 8-8 Python in Beispielen Klassen und Objekte class BankAccount(object): def __init__(self, initial_balance=0): self.balance = initial_balance def deposit(self, amount): self.balance += amount def withdraw(self, amount): self.balance ­= amount def overdrawn(self): return self.balance < 0 my_account = BankAccount(15) my_account.withdraw(5) print my_account.balance © Peter Pfahler, Michael Thies, Universität Paderborn 8-9 Python und CGI #!/usr/bin/python import cgi print "Content­type: text/html" print print """ <html> <head><title>Sample CGI Script</title></head> <body> <h3> Sample CGI Script </h3> """ form = cgi.FieldStorage() message = form.getvalue("message", "(no message)") print """ <p>Previous message: %s</p> <form method="post" action="try.py"> <p>message: <input type="text" name="message"/></p> </form> </body> </html> """ % message © Peter Pfahler, Michael Thies, Universität Paderborn 8-10