Einführung in Python

Werbung
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
Herunterladen