Python V ti f Vertiefungsmodul d lP Programmiersprachen i h Name: Philipp Riemer Hier Logo oder Name (Schriftart Meta, Schriftgröße 15Pkt) bündig mit dem Claim positionieren WIRTSCHAFTS INFORMATIK P th Python Agenda d Name: Philipp Riemer 05.06.2009 2 P th Python Einleitung i l i Name: Philipp Riemer 05.06.2009 3 P th Python i Language off the h Year 2008 Programming Sonst. Sonst Ruby Python yt Perl Java C++ C PHP Name: Philipp Riemer 05.06.2009 N = 886 Linuxquestions.org 4 P th Python Python h im i Einsatz i Name: Philipp Riemer 05.06.2009 5 P th Python i i Historie entstand 1989 am CWI in Amsterdam Administration eines verteilten OS Erfinder: E fi d Guido G id van Rossum R N Namensgeber: b Monty M t Python P th V bild ABC ((auch h vom CWI) Vorbild: Name: Philipp Riemer 05.06.2009 6 P th Python Versionen i Name: Philipp Riemer CPython Jython IronPython PyPy 05.06.2009 7 P th Python Sprachbesonderheiten hb d h i kaum Klammern zwingende wingende Einrückungen i t interpretiert ti t / JIT-Compilierung JIT C ili möglich ö li h d dynamisch i h erweiterbar it b möglichst ö li h t einfache i f h S Sprache h Name: Philipp Riemer 05.06.2009 8 P th Python Datentypen Object None int,float,long list functions Boolean complex tuple classes str, unicode set modules dict exceptions type Quelle: Microsoft Name: Philipp Riemer 05.06.2009 9 P th Python Standardbibliothek d dbibli h k unteranderem bereits mit: mit • GUI • reguläre Ausdrücke • Nebenläufigkeit g • Kryptographie • Multimediacodecs M lti di d • Internetprotokolle • Unittests & Logging Name: Philipp Riemer Python comes with batteries included 05.06.2009 10 P th Python Codedesign d d i Name: Philipp Riemer 05.06.2009 11 P th Python Fehlerbehandlung hl b h dl analog l zu z.B. B Java J f open(“save log” “r”) f = open(“save.log”, Besonderheit: else try: kürzer mit with with open(”save.log”, “r”) as f: print f.read() Name: Philipp Riemer print f.read() i t f d() except IOError: print “Datei nicht lesbar” fi ll finally: f.close() 05.06.2009 12 P th Python Funktionen/ ki / Prozeduren d Schlüsselwort def Schlüsselwort: verschachtelte Funktionen und Closures möglich anonyme Funktionen (Lambda-Ausdrücke) Name: Philipp Riemer def binom(n, k): def binom(n k): def fac(n): if n == 0: return 1 else: return n * fac(n‐1) return fac(n) / t f ( ) / (fac(n‐k)*fac(k)) >>> f = lambda x,y: (x+y)**2 >>> f(3,2) 25 05.06.2009 13 P th Python Klassen l Schlüsselwort class Schlüsselwort: class Filter(): def __init__(self): self.blocked = [] def filter(self seq): def filter(self, seq): return [x for x in seq if x not in self.blocked] Magic Methods explizite Objektreferenz (meist self genannt) (Mehrfach-) Vererbung möglich Name: Philipp Riemer 05.06.2009 class SPAMFilter(Filter): def __init__(self): self.blocked = [‘SPAM’] lf bl k d [‘SPAM’] 14 P th Python Ducktyping k i Idee aufgrund eines Gedichtes EAFP vs. LBYL for duck in ducks: try: duck.quak() except AttributeError : print ’kann nicht quaken:’, duck kann nicht quaken: Maus Jerry Ente Donald: quak Frosch Fridolin: quaaak kann nicht quaken: <object object at 0xb7d72460> Name: Philipp Riemer 05.06.2009 15 P th Python Erweiterbarkeit i b k i Name: Philipp Riemer 05.06.2009 16 P th Python Module d l i Python in P th (oder ( d C, C C++, C F t ) Fortran) meist: 1 Datei = 1 Modul sonst: Packages Funktionen & neue Programmierparadigmen keine Header-Dateien notwendig nativer Zugriff auf Code in C,C++ oder Fortran Name: Philipp Riemer 05.06.2009 17 P th Python Zugriff iff eigene i N Namensräume sä je j Modul M d l diskret import math ohne Präfix from math import sin komplett (ohne Präfix) from math import * mit i Ali Alias f from math import pi as Zahl_PI th i t i Z hl PI Name: Philipp Riemer 05.06.2009 18 P th Python Sichtbarkeiten i hb k i public bli a = 17 protected _b = 23 private __c = 42 Properties p möglich g d = p property([fget[, fset p y([ g [, [, fdel[, docstr]]]]) Name: Philipp Riemer 05.06.2009 19 P th Python Beispiel i i l Name: Philipp Riemer 05.06.2009 20 P th Python def solve(s): """Find solutions to alphametic equations >>> solve("SEND + MORE == MONEY") 9567 + 1085 == 10652 """ Generische Lösung alphametischer p Rätsel mit Python from re import findall from string import maketrans from itertools import permutations words = findall('[A‐Za‐z]+', s) chars = set(''.join(words)) chars = set( join(words)) assert len(chars) <= 10 firsts = set(w[0] for w in words) chars = ''.join(firsts) + ''.join(chars ‐ firsts) n = len(firsts) f for perm in permutations('0123456789', len(chars)): i t ti ('0123456789' l ( h )) if '0' not in perm[:n]: trans = maketrans(chars, ''.join(perm)) equation = s.translate(trans) if eval(equation): return equation for alphametic in [ 'SEND + MORE == MONEY', 'SEND + A + TAD + MORE == MONEY', SEND A TAD MORE MONEY , 'I + GUESS + THE + TRUTH == HURTS', ]: print alphametic print solve(alphametic) Name: Philipp Riemer 05.06.2009 21 P th Python Agenda d Name: Philipp Riemer 05.06.2009 22 P th Python Name: Philipp Riemer 05.06.2009 23