Outline Theoretische Einführung Praktische Beispiele Fragen Einführung in Python Nils Brünggel und Martin Furter 3. Juni 2005 Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Inhalt 1 2 3 Theoretische Einführung Python? Syntax Interpreter Datentypen Anweisungen Module OOP Praktische Beispiele Text Sysadmin Win Web XML Grafik Fragen Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Was ist Python? Eine objektorientierte Programmiersprache. Python wurde mit dem Ziel entworfen möglichst einfach und übersichtlich zu sein. Alle Implementierungen übersetzen den Text eines Python-Programmes in Bytecode, welcher dann von einer Virtual Machine ausgeführt wird. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Lizenz Python ist Open Source (OSI Zertifiziert). Die Python Lizenz ist GPL kompatibel. Python gehört der PSF (Python Software Foundation), diese ist ähnlich aufgebaut wie die Apache Foundation. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP google ”Python has been an important part of Google since the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we’re looking for more people with skills in this language.” said Peter Norvig, director of search quality at Google, Inc Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Industrial Light & Magic ”Python plays a key role in our production pipeline. Without it a project the size of Star Wars: Episode II would have been very difficult to pull off. From crowd rendering to batch processing to compositing, Python binds all things together,” said Tommy Burnette, Senior Technical Director, Industrial Light & Magic. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Noch viele andere.. Darunter BitTorrent, RedHat (Anaconda, der Installer für RedHat Linux Professional und Fedora), Gentoo (emerge), NASA, etc.. Python wird sowohl bei grossen Projekten wie auch bei sehr kleinen Applikationen verwendet. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Whitespaces gehören bei Python zur Syntax #!/usr/bin/python def sayHello(name): # print gibt automatisch ein LF (’\n’) aus print "Hello"+ name + ", how are you?" name = raw input("Please enter your Name: ") sayHello(name) Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Interaktiver Interpreter Der Python Interpreter kann interaktiv benutzt werden, zum Ausprobieren, Testen, Debuggen ist dies sehr praktisch. Die Tab Completition wird folgendermassen aktiviert: import readline, rlcompleter readline.parse and bind("tab: complete") Beim Starten wird die Datei welche in der Umgebungsvariable PYTHONSTARTUP gesetzt wird ausgeführt. Damit kann man Tab Completition automatisch setzen lassen. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Übersicht Dynamic Typing Python entscheidet selber welcher Datentyp verwendet wird. Datentypen Integer, Float Point, Boolean Sequenzen Strings, Tupel, List, Dictionaries Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Numerische Datentypen Im Gegensatz zu Java sind in Python auch Numerische Datentypen Objekte. Boolsche Variablen können nützlich sein: # toggle switch # True = 1; False = 2 a =1 if a != 1: a =1 else: a =0 # geht einfacher mit bool a = True a = not a Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Strings Strings sind Sequenzen wie auch Listen, Tupel, etc name = "tux the great" name.islower() # True len(name) # 13 name[:3] # tux name[4:7] # the name[-5:] # great string2 = "is cool" name.capitalize() + ’ ’+ string2 + ’.’ # Tux the great is cool. # Strings sind im Gegensatz zu Listen unveraenderbar, # folgendes funktioniert nicht: name[0] = ’T’ Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP String Konvertierung #!/usr/bin/env python # -*- coding: iso-8859-1 -*# Die obige Zeile sagt dass dieses File in iso-8859-1 encoded ist # Also dürfen wir jetzt Umlaute verwenden iso = "äöü" # in unicode konvertieren unicodestr = iso.decode( "iso-8859-1") # und zurück newiso = unicodestr.encode( "iso-8859-1") # ein String in eine Zahl umwandeln num = int("123") # und wieder in einen String numstr = "%d"% num # Konvertierung ähnlich printf in C print "%d: %04X %s"% ( 42, 45054, "Text") Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Listen und Tupel Listen unterscheiden sich von Arrays: Sie können Elemente von verschiedenen Datentypen enthalten. FreeSoftware = ["Linux", "Apache", "Python"] GnuSoftware = ["emacs", "gcc", "flex", "bison"] if "Microsoft"in FreeSoftware: ScoIsRight = True FreeSoftware.append(GnuSoftware) # [’Linux’, ’Apache’, ’Python’, ’Mozilla’, [’emacs’, ’gcc’, ’flex’, ’bison’]] FreeSoftware[1:3] # [’Linux’, ’Apache’, ’Python’] Ein Tupel ist eine unveränderbare Liste und wird mit runden Klammern definiert. ”append()” würde bei einem Tupel also nicht funktionieren. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Verzeichnisse Ein Verzeichnis ist eine Liste von Schlüssel / Wert Paaren und wird mit geschweiften Klammern definiert. Bedingung ist dass der Schlüssel nicht veränderbar ist. verz = {"linux":"schnell", "mac":"cool"} verz["win"] = "minesweeper" verz. len () # ist das gleiche wie len(verz), 3 verz.has key("linux") # True verz.keys() # [’windows’, ’mac’, ’linux’] Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Typen Prüfung Mit dem Modul types kann der Typ einer Variablen geprüft werden: #!/usr/bin/env python from types import * a =1 if type(a) is IntType: # dies hier wird ausgegeben da a ein int ist print "a hat Typ IntType" else: print "a hat nicht Typ IntType" Einige Beispiele für standard Typen sind: BooleanType, IntType, FloatType, StringType, TupleType, ListType, DictType, FunctionType, ClassType. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Alternative Typen Prüfung Hier eine alternative Methode um typen zu prüfen.. Bitte beachten, das int nicht in Anführungszeichen steht. a = 1234 b = "hello" if a. class == int and b. class == str: print "a ist int und b str" Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP if elif else #!/usr/bin/env python a =b =1 if a == 0 and b print "a und elif a == 0: print "nur a else: print "a ist == 0: b sind beide 0" ist 0" nicht 0, b weiss ich nicht" Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP while #!/usr/bin/env python fruechte = [ "Ananas", "Banane", "Birne"] i = len(fruechte) while i > 0: i =i - 1 print fruechte[i] Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP for (1/2) #!/usr/bin/env python fruechte = [ "Ananas", "Banane", "Birne"] for frucht in fruechte: print frucht # range( 0, 3 ) = [ 0, 1, 2 ] for i in range( 0, 3 ): print i Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP for (2/2) #!/usr/bin/env python fruechte = { "Banane":"gelb", "Apfel":"rot", "Birne":"gruen"} for frucht in fruechte.keys(): print "%s ist %s"% ( frucht, fruechte[frucht] ) for fruchttuple in fruechte.items(): print "%s ist %s"% ( fruchttuple[0], fruchttuple[1] ) for frucht, farbe in fruechte.items(): print "%s ist %s"% ( frucht, farbe ) Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Zuweisungen #!/usr/bin/env python liste = [ 11, 12, 13 ] a, b, c = liste # a = 11, b = 12, c = 13 tuple = ( 21, 22, 23 ) a, b, c = tuple # a = 21, b = 22, c = 23 # tauschen von 2 Variablen a, b = b, a # a = 22, b = 21 Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Batteries Included #python (freenode) <jc-denton> in perl there is a module for using tar <jc-denton> is there something similar in python <ThomasWaldmann> iirc yes <ThomasWaldmann> i think there are modules for zip and tar files <jc-denton> well google cant find them for me <ThomasWaldmann> http://www.python.org/doc/lib/module-tarfile.html <jc-denton> omg! <jc-denton> its included <jc-denton> w00t <ThomasWaldmann> batteries included :) Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Python Module Bibliotheken heissen in Python Module. Module können in C und Python geschrieben werden. Module werden mit Hilfe des ”import”-Statements importiert. Die meisten Module der Standardbibliothek sind platformunabhängig. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Klassen und Objekte in Python Definieren einer Klasse: class Counter: Ableiten einer Klasse (Mehrfach-Ableitung geht auch): class MegaCounter( Counter ): Funktionen kann es nur einmal geben pro Klasse, sie können aber in einer Ableitung überschrieben werden. Funktionen erhalten als ersten Parameter das Objekt, üblicherweise self genannt. Private Funktionen und Variablen beginnen mit zwei Underscores. Auf Objekt Funktionen und Variablen muss mit self zugegriffen werden. Der Konstruktor einer Klasse heisst init . def init ( self, count ): self. count = count Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Definieren einer Counter Klasse # file: counter.py class Counter: """Eine einfache Counter Klasse.""" def init ( self ): """Der Konstruktor dieser Klasse.""" self. count = 0 def get( self ): """Gibt den aktuellen Wert zurueck.""" return self. count def inc( self ): """Erhoeht den Counter.""" self. count = self. count + 1 Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Python? Syntax Interpreter Datentypen Anweisungen Module OOP Anwenden der Counter Klasse #!/usr/bin/env python from counter import Counter c = Counter() print c.get() c.inc() print c.get() #0 #1 Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik Beispiele Alle gezeigten Beispiele findet ihr hier: http://phuturetech.info/pyvortrag.pdf Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik Text Processing mit Python Grundsätzlich gibt es drei verschiedene Operationen: Text in eine Datenstruktur einlesen. Den Text in etwas Ähnliches umwandeln. (eg das Format ändern) Komplett neue Daten generieren. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik Text File einlesen #!/usr/bin/env python fileobj = open( "/etc/passwd", "r") users = [] for line in fileobj: fields = line.strip().split( ":") users.append( { "name": fields[0], "password": fields[1], "uid": fields[2], "gid": fields[3], "comment": fields[4], "home": fields[5], "shell": fields[6] }) print "User %s hat shell %s"% ( fields[0], fields[6] ) Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik Text File schreiben fileobj = open( "passwd", "w") for user in users: fileobj.write( "%s:%s:%s:%s:%s:%s:%s\n"% ( user["name"], user["password"], user["uid"], user["gid"], user["comment"], user["home"], user["shell"] )) fileobj.close() Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik tarfile Python wird mit Modulen für tar, zip, gzip und bzip2. import tarfile, sys if len(sys.argv) < 2: print "Usage: "+ sys.argv[0] + " file.tar" sys.exit(1) try: fp = tarfile.open(sys.argv[1], "r") except: print "Please enter a correct Filename" sys.exit(1) print "Name: "+ fp.name + "\n" print "Content:" fp.list() fp.close() Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik Python auf Windows Python läuft auf Windows genau so gut wie auf *IX. Es gibt jedoch einige Dinge zu beachten: Pfade enthalten Backslash statt normalem Slash. Dafür gibt es Funktionen im Modul os.path. Windows hat die Angewohnheit beim Lesen und Schreiben von Files LF durch CRLF zu ersetzen. Wenn man das nicht möchte muss man Files im binären Modus öffnen: readfile = open( filename, ’rb’ ); writefile = open( filename, ’wb’ ); Einige wenige Module sind nicht auf allen Plattformen verfügbar. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik Eine einfache Webabfrage #!/usr/bin/env python from sys import argv from httplib import * if len(argv) == 5: host = argv[1] port = int(argv[2]) path = argv[3] file = argv[4] conn = HTTPConnection( host, port ) conn.request( "GET", path ) response = conn.getresponse() fileobj = open( file, "w") fileobj.write( response.read() ) fileobj.close() else: print "usage: wget.py host port path outfile" Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik Ein einfacher Webserver #!/usr/bin/env python from BaseHTTPServer import HTTPServer from BaseHTTPServer import BaseHTTPRequestHandler class TestRequestHandler( BaseHTTPRequestHandler ): def do GET( self ): self.send response( 200 ) self.send header( "Content-type", "text/html") self.end headers() self.wfile.write( "<html>\n" "<head>\n<title>Test</title>\n</head>\n" "<body>\n<h1>Test</h1>\n" "<p>you requested ’%s’</p>\n" "</body>\n</html>"% self.path ) srv = HTTPServer( ( ’’, 8888 ), TestRequestHandler ) srv.serve forever() Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik Universal Feed Parser Mit Feedparser ist es sehr einfach RSS und Atom Feeds zu parsen. Als Beispiel holen wir die Schlagzeilen von Slashdot. Mehr Informationen und das Modul findet man unter http://feedparser.org. import feedparser slashdot = \ feedparser.parse("http://slashdot.org/index.rss") for i in slashdot.entries: print "\033[1m"+ i.title + "\033[m" print i.description[:200] + ".." print Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik XML SAX Importieren der benötigten Funktionen und Klassen: from xml.sax import * from xml.sax.saxutils import escape Zum parsen von XML Files braucht man einen Content Handler: class MyContentHandler( ContentHandler ): # funktionen wie startElement, endElement # oder characters überladen Parsen eines XML Files: handler = MyContentHandler() parse( ’file.xml’, handler ) Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Text Sysadmin Win Web XML Grafik Pygame - SDL für Python Python eignet sich auch für Grafikprogrammierung, beispielsweise können so kleinere Spiele wie Bub’n Bros oder Solarwolf programmiert werden. Python wurde für einige Proprietäre Spiele wie Freedom Force oder Humungous’ Backyard Sports Series verwendet. Falls Arrays benötigt werden kann die Numeric Package verwendet werden, die Arrays sind schneller als die Listen in Python. Hier ein einfaches Beispiel, das die Sinus- und Kosinuskurve zeichnet. Nils Brünggel und Martin Furter Einführung in Python Outline Theoretische Einführung Praktische Beispiele Fragen Fragen, Kommentar, Erfahrungen..? Weitere Dokumentation auf http://www.python.org/doc/ Danke fürs Zuhören! Nils Brünggel und Martin Furter Einführung in Python