Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... •...

62
Python-Überblick Martin v. Löwis Freitag, 1. Juli 2011

Transcript of Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... •...

Page 1: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Python-ÜberblickMartin v. Löwis

Freitag, 1. Juli 2011

Page 2: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Python

• interpretierte imperative objektorientierte dynamische Hochsprache

• Lesbarkeit

• elegantes Datentypsystem

• integrierte Bibliotheken

• breite Anwendungsgebiete

• Integrationstechnologie

Freitag, 1. Juli 2011

Page 3: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Geschichte• entwickelt von Guido van Rossum

• CWI Dezember 1989

• Version 2.0 im Oktober 2000

• Unicode-Unterstützung, String-Methoden, echte Garbage Collection

• weitergepflegt bis Python 2.7 (aktuell 2.7.1)

• Version 3.0 im Dezember 2008

• viele inkompatible Änderungen

• aktuell 3.2(.1)

Freitag, 1. Juli 2011

Page 4: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Anwendungsgebiete• große Standardbibliothek ("batteries included")

• Scripting

• cron jobs, Einmalskripte

• Web- und Internetentwicklung

• Bibliotheken (urllib, Twisted, email, smtplib, OpenID)

• Web-Frameworks (Django, TurboGears, Zope)

• Content Management Systems (Plone)

• Anwendungen (Mailman, MoinMoin, Roundup, Trac, BitTorrent, SpamBayes, Dropbox)

Freitag, 1. Juli 2011

Page 5: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Anwendungsgebiete (2)• Softwareentwicklung (Mercurial, Bazaar, SCons,

Buildbot)

• Datenbankzugriff

• eingebaut: sqlite3

• separate Adapter: MySQL, Postgres, MS SQL, Oracle, ...

• GUI-Anwendungen

• eingebaut: Tk (Tkinter)

• separat: wxWidgets, PyQt, PyGTK

Freitag, 1. Juli 2011

Page 6: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Anwendungsgebiete (3)

• wissenschaftliche Anwendungen

• Numerik (NumPy)

• mathematische/statistische Verfahren (SciPy)

• Visualisierung (VTK, PIL)

• Spiele

• Entwicklung (PyGame)

• Produkte (z.B. Eve Online)

Freitag, 1. Juli 2011

Page 7: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Anwendungsgebiete (4)

• Erweiterungssprache größerer Anwendungen (Skripting/Embedding)

• Blender (3D-Modellierung)

• OpenOffice (PyUNO)

• Integration von C-Bibliotheken (Extending) (SWIG, Cython)

• alternative Implementierungen (Jython, IronPython, PyPy, Stackless Python)

Freitag, 1. Juli 2011

Page 8: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Ökosystem

• PyPI (Python Package Index, Cheeseshop)

• ca. 14000 Pakete

• viele als Debian/SuSE-Pakete verfügbar

• konkurrierende Tools (setuptools/distutils/pip/zc.buildout)

Freitag, 1. Juli 2011

Page 9: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

TutorialPython 2.x

Freitag, 1. Juli 2011

Page 10: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Interaktiver Modus

• python (/usr/bin/python)

• readline-basierter Kommandozeileneditor

• idle

• Tkinter-basierte GUI-Umgebung

• PYTHONSTARTUP

Freitag, 1. Juli 2011

Page 11: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Einfache Anweisungen• Ausdrücke: + - * / % ** // == <= >= != & | and or

• Zuweisungen: variable = wert

• variable op= wert

• Python als Taschenrechner

• print Ausdruck

• print a1, a2, a3

• print a1,

• Leeranweisung: pass

Freitag, 1. Juli 2011

Page 12: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

"Primitive" Datentypen

• Zahlen: int (long), float, complex

• 3, 0x61, 10000000L, 3.14, 1e-9, 6+5j

• Konvertierung über "Funktion"

• int(3.14)

• float("-5.0")

• Typermittlung: type(x)

Freitag, 1. Juli 2011

Page 13: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Primitive Datentypen (2)• Strings: "Hallo, Welt!"

• einfache oder doppelte Anführungszeichen

• kein Typ für character

• Mehrzeilige Strings: """ text """

• ''' text '''

• Escape-Zeichen: \n, \x61

• Unicode-Strings: u'Technische Universität Ilmenau'

• String-Methoden: .split(), .strip(), ...

Freitag, 1. Juli 2011

Page 14: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Containertypen• Tupel: ('Monika', 'Mustermann', 1965)

• Indizierter Zugriff: t[3]

• nicht nachträglich änderbar

• Listen: ["Berlin", "Leipzig", "Erfurt", "Ilmenau"]

• Änderbar: +=, .append(), .extend(), .sort(), .reverse(), ...

• range(n) liefert Liste 0,1,...,n-1

• Familie: sequences

Freitag, 1. Juli 2011

Page 15: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Containertypen (2)

• Dictionaries (Hashtabellen)

• Schlüssel-Wert-Paare

• x = {'Erfurt':99084, 'Ilmenau':98693}

• Leeres Dictionary: {}

• Familie: mappings

Freitag, 1. Juli 2011

Page 16: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Indizierung• beginnend bei 0, Ausnahme (IndexError) bei Bereichsverletzung

• Länge des Containers: len(c)

• Negative Indizes zählen von hinten

• x[-1]

• Slicing: Ausschnitt aus Container

• x[0:4] - Elemente 0, 1, 2, 3

• x[3:-3]

• x[4:], x[:4], x[:]

• x[0:10:2], x[::-1]

• range liefert die gleichen Indizes (z.B. range(0,10,2))

Freitag, 1. Juli 2011

Page 17: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Dictionaries• "beliebige" Schlüssel und Werte

• Schlüssel muss hash() unterstützen

• Zugriff: d[K]

• Ausnahme (KeyError) bei Lesen von ungültigem Schlüssel

• .get(K, default) liefert ggf. default

• None falls default nicht angegeben

• Iteratoren .keys(), .values(), .items()

Freitag, 1. Juli 2011

Page 18: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Dateien

• open("name", "modus")

• modus: "r", "w", "a", "rb", ...

• liefert file-Objekt (Familie: file-like objects)

• .read(), .read(n), .readlines()

• .write(data)

• .seek(n), .tell()

• .flush(), .close()

Freitag, 1. Juli 2011

Page 19: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

while

• while bedingung: aktion

• break, continue

• Optionaler else-Teil, falls Schleife nicht über break verlassen wird

• Blockstruktur durch Einrückung

• Konvention: nur mit Leerzeichen (keine Tabs), normalerweise 4 (interaktiv oft weniger)

Freitag, 1. Juli 2011

Page 20: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

for

• for variable in liste: aktion

• liste: iterable

• break, continue, else

• "Zählschleife": for i in range(100)

Freitag, 1. Juli 2011

Page 21: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

if

• if bedingung1: aktion1elif bedinging2: aktion2else: aktion3

• "arithmetisches if" M = V if V >= 0 else -V

• keine case-Anweisung

Freitag, 1. Juli 2011

Page 22: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

with

• "sicheres Aufräumen"

• with open("/etc/passwd") as f: ....

• Datei wird am Ende automatisch geschlossen

Freitag, 1. Juli 2011

Page 23: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

List Comprehension

• even_squares = [x*x for x in L if x%2 == 0]

Freitag, 1. Juli 2011

Page 24: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Funktionen• def foo(param1, param2):

code return param1+param2

• Aufruf: foo(1,2)

• Methoden: o.foo()

• Funktionen sind Objekte

• fns = [math.sin, math.cos]fns[1][3.14]

• Erster String in Funktion: docstring (help)

Freitag, 1. Juli 2011

Page 25: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Benannte Argumente

• def write_text(data, language="en", encoding="utf-8"): code

• write_text("Hallo", language="de")

• write_text("Martin v. Löwis", encoding="iso-8859-1")

• Alternativ: Rufer kann parameter auch in richtiger Reihenfolge übergeben

• write_text("Hallo", "de")

Freitag, 1. Juli 2011

Page 26: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Tuple-Unpacking

• x = 1,2,3

• a,b,c = x

• def f(): return 1,2,3

• a,b,c = f()

• for a,b,c in [(1,2,3), (4,5,6), (7,8,9)]

Freitag, 1. Juli 2011

Page 27: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Generators• Funktionen mit mehreren Ergebnissen

"hintereinander"

• yield liefert je ein Ergebnis

• "unendliche" Folgen

• def even(): i = 0 while True: yield i i += 2

• for e in even(): ...

Freitag, 1. Juli 2011

Page 28: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Module• Bibliotheken (Funktionen, Klassen, "globale"

Variablen/symbolische Konstanten)

• Implementiert in Python (modulname.py) oder C (modulename.so)

• import modul

• from modul import funktion, funktion

• import modul as anderer_name

• from modul import funktion as anderer_name

Freitag, 1. Juli 2011

Page 29: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Typische Module• sys: Interpreter-/Sprach-/Implementierungsdetails

• sys.argv, sys.stdout, sys.platform, sys.maxint

• os: Betriebssystem-API

• os.path: Dateisystem (os.path.exists, os.path.isdir, os.path.basename)

• os.getcwd, .chdir, .chown, .getpid, .kill, ...

• math: trigonometrische u.ä. Funktionen

• re: reguläre Ausdrücke

• threading: Multi-Threading

Freitag, 1. Juli 2011

Page 30: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Module (2)• import führt Modulcode aus (z.B. if, print)

• "bedingte Übersetzung"

• Gescheiterter import (Modul nicht vorhanden, Symbol in Modul nicht gefunden) liefert ImportError

• Suchpfad für Module: sys.path

• Verzeichnisse, zipfiles

• Umgebungsvariable PYTHONPATH

Freitag, 1. Juli 2011

Page 31: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Packages

• Modul-Hierarchie

• Package ist Verzeichnis mit __init__.py

• import package führt __init__.py aus

• import foo.bar.foobar

• foo.bar.foobar.baz()

• from foo.bar import foobar

• Typische Pakete: xml, email, distutils

Freitag, 1. Juli 2011

Page 32: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Übungπ

Freitag, 1. Juli 2011

Page 33: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Berechnung von π

• Idee: Zufallszahlengenerator zur Berechnung

• Zufällige Punkte im Einheitsquadrat sind mit Wahrscheinlichkeit π/4 im Einheitskreisviertel

• Modul random liefert Zufallszahlen

• Dokumentation: docs.python.org

Freitag, 1. Juli 2011

Page 34: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Webscraping

Freitag, 1. Juli 2011

Page 35: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Webscraping

• Ziel: Extraktion von Daten aus bekannten Webseiten

• unabhängig von crawling

• Aufgabe: Netzwerkzugriff

• Aufgabe: Extraktion

Freitag, 1. Juli 2011

Page 36: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Netzwerkzugriff• socket: TCP- oder UDP-Sockets

• "direkter" Netzzugriff (BSD sockets)

• DNS-Unterstützung

• httplib: Implementierung von HTTP (1.0/1.1) auf Basis von sockets

• Optional https

• urllib: Auflösen von URLs, Integration von httplib, ftplib, ...

• urllib2: Stärker-modulare Reimplementierung

• Authentifizierung, Cookies, ...

Freitag, 1. Juli 2011

Page 37: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

urllib

• .urlopen(URL [, Query-Parameter [, Proxies])

• liefert "erweitertes" Dateiobjekt

• zusätzlich Methoden

• .info(): mimetools.Message (Reply-Headers)

• .geturl(): tatsächlicher URL (nach redirects)

• .getcode(): HTTP-Status (nur für HTTP-URLs)

Freitag, 1. Juli 2011

Page 38: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Extraktion• Webscraping: üblicherweise HTML

• einfacher sind RSS, Atom, JSON, XML

• generiertes HTML: Scraping über Textstruktur

• String-Methoden

• reguläre Ausdrücke

• HTML-Parsing: htmllib, BeautifulSoup

• XML-Parsing: Package xml (xml.sax, xml.dom, xml.etree), lxml, ...

Freitag, 1. Juli 2011

Page 39: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Reguläre Ausdrücke

• Syntax an Perl angelehnt

• . ^ $ * + ? [] ()

• *? +? ?? {m} {m,n}

• (?...) (?P<name>...)

• \s \w \d ...

Freitag, 1. Juli 2011

Page 40: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

re

• .search(pattern, text): Teilstring-Suche

• liefert Match-Objekt

• .group(), .group(1), .group('foo'), .start(), .end()

• .match(pattern, text): Suche am Anfang

• .split, .findall, .sub

• .finditer

• .compile

Freitag, 1. Juli 2011

Page 41: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

ÜbungFlitzerblitzer

Freitag, 1. Juli 2011

Page 42: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Antenne Thüringen

• http://www.antennethueringen.de/at_www/service/Verkehr/blitzer.php

• <div class="txt11"> B 87 Bad Kösen Richtung Naumburg</div>

Freitag, 1. Juli 2011

Page 43: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

OOP

Freitag, 1. Juli 2011

Page 44: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Klassen

• class Name(Basisklassen): def __init__(self, parameter): code b methode(self, parameter): code

• Erzeugung von Exemplaren: o = Name(argumente)

• Methodenrufe: o.methode(argumente)

Freitag, 1. Juli 2011

Page 45: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Spezialmethoden• __name__ reserviert für Interpreter

• Interpreter ruft Methoden "magisch"

• __init__: Konstruktor, gerufen zur Objektinitialisierung

• __del__: Finalizer, gerufen vor Freigabe des Objekts

• __str__: Stringkonvertierung (genauso __int__ ...)

• __getattr__: dynamische Attribute

• __getitem__: Definition von Sequence-Typen

Freitag, 1. Juli 2011

Page 46: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Properties

• class Rechteck: def __init__(self, x, y, b, h): self.x, self.y, self.b, self.h = x, y, b, h def flaeche(self): return self.b*self.h flaeche = property(flaeche)

Freitag, 1. Juli 2011

Page 47: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Ausnahmen (exceptions)• Klassen abgeleitet von Exception

• Standard-Ausnahmen im Modul exceptions

• NameError: Variable ist nicht definiert

• AttributeError: in o.a hat o kein Attribut a

• TypeError: Argumenttyp ist für Funktion/Parameter nicht erlaubt

• ValueError: der Typ ist richtig, aber der Wert ungültig

• Auslösen: raise E, "String"

• raise E(param, param)

Freitag, 1. Juli 2011

Page 48: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Ausnahmebehandlung

• try: codeexcept E, wert: codeelse: codefinally: code

Freitag, 1. Juli 2011

Page 49: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Annotationen

• @foodef bar(params): code

• Funktion wird nach Definition behandelt.

• Formal: bar = foo(bar)

• Anwendungsfälle: staticmethod, classmethod, property, unittest.skipIf

Freitag, 1. Juli 2011

Page 50: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Django

Freitag, 1. Juli 2011

Page 51: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Web-Frameworks

• Systeme zur Entwicklung von Webanwendungen

• Webserver

• wahlweise eingebaut oder durch Integration mit Webserver

• HTML-Temlate-Sprache

• Datenbankschicht (oft: ORM)›

Freitag, 1. Juli 2011

Page 52: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Django

• eigener Webserver nur zu Entwicklungszwecken

• ansonsten Integration in Apache, Nginx über mod_wsgi, mod_fcgi, mod_python

• eigenes ORM (für MySQL, Postgres, SQLite, ...)

• eigene Templatesprache

Freitag, 1. Juli 2011

Page 53: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Python 3

Freitag, 1. Juli 2011

Page 54: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Python 3• Ab ca. Python 2.2: Plan für grundsätzliches

Redesign von CPython

• nach "XXX 2000"-Welle "Python 3000" genannt

• Idee z.B. Neuimplementierung in C++

• tatsächlich: Python 3

• Aufgabe rückwärtskompatibler Features

• Umsetzung langfristiger Änderungspläne

• Umgruppierung der Standardbibliothek

Freitag, 1. Juli 2011

Page 55: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

print

• ist eine Funktion

• exec genauso

• raw_input heißt jetzt input

Freitag, 1. Juli 2011

Page 56: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Unicode

• Standard-Strings sind nun Unicode-Strings; u""-Syntax nicht mehr möglich

• b""-Syntax für "traditionelle" Byte-Strings

• unterstützt ab Python 2.6

Freitag, 1. Juli 2011

Page 57: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Dictionary Views

• 2.x: keys(), values, items() liefert Listen (genauso range())

• Speicherverschwendung: Liste oft nicht benötigt, nur Werte

• 2.x: iterkeys(), itervalues(), iteritems(), xrange()

• 3.x: keys() liefert "intelligente Liste" (view); range() liefert Iterator

Freitag, 1. Juli 2011

Page 58: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Keine totale Ordnung

• 2.x: beliebige Objekte sind vergleichbar (<)

• cmp(a,b) liefert -1, 0, 1

• totale Ordnung ist semantisch schwierig

• 3.x: keine totale Ordnung mehr

• auch keine cmp-Funktion mehr

Freitag, 1. Juli 2011

Page 59: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Nur ein Ganzzahltyp

• 2.x: int (32-/64-bit), long (beliebig)

• 3.x: int (beliebig)

Freitag, 1. Juli 2011

Page 60: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Neue Syntax

• Parameterannotationen

• Dictionary Comprehension: {k:v for k,v in stuff}

• Mengenliteral: {1, 2}

• Neue Oktalsyntax: 0o644 (2.x: 0644)

• Binärzahlen: 0b1010101

• ...

Freitag, 1. Juli 2011

Page 61: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

Gestrichene Syntax

• <>

• Tupel-Unpacking in Parameterlisten def x(a,(b,c)): ...

• `expr` (3.x: repr(expr))

• "classic classes"

• alle Klassen sind jetzt "new-style classes"›

Freitag, 1. Juli 2011

Page 62: Python-Überblick - fosslc.de€¢ separate Adapter: MySQL, Postgres, MS SQL, Oracle, ... • GUI-Anwendungen • eingebaut: Tk ... a3 • print a1, ... • eigenes ORM (für MySQL,

2to3

• semiautomatische Konvertierung von 2.x nach 3.x

• Anwendungsfall: Migration nach 3.x

• Anwendungsfall: gleichzeitige Unterstützung von 2.x und 3.x

• Quelltext als 2.x formuliert

• 3.x-Version mittels 2to3 vollautomatisch generiert

Freitag, 1. Juli 2011