www.thomas-guettler.de / Vorträge
niemand.leermann@thomas-guettler.de
Python, Programmieren macht Spaß
   Einführung
   Wie bin ich zu Python gekommen?
   Begeisterung
   Beispiel: Taschenrechner
   Datentypen
5.    Übersicht
5.    Zahlen
5.    Zeichenketten
5.    Listen
5.    Dictionaries (Hash-Tables)
   Sonstiges
   Flusssteuerung
   Funktionen
   Python-Datei
10    Dateien
11    Klassen - Objektorientierung
12    Standardbibliothek
12.    Module importieren
12.    Paketauswahl
13    Externe Bibliotheken
14    Beispiele
15    Externe Links
15.    Internet
15.    Best of Python Cookbook
16    Nachteile von Python
17    Vergleich mit anderen Programmiersprachen
18    Hinweise zur Python Programmierung
19    FAQ
20    Python++
20.    List Comprehension
20.    Properties
20.    Decorator
20.    Generators
21    Debugging Tipps
22    About

1 Einführung [toc]

2 Wie bin ich zu Python gekommen? [toc]

3 Begeisterung [toc]

4 Beispiel: Taschenrechner [toc]

5 Datentypen [toc]

Integer i=1 Ganzzahl
Float f=0.1 Gleitkommazahl
String s="hallo" Zeichenkette
Liste l=[1, 2, 3] Veränderbare Liste
Tuple t=(1, 2, 3) Unveränderbare Liste
Dictionary d={1: "eins", 2: "zwei", 3: "drei"} Auch Hash oder assoziatives Array genannt.
Es gibt die Datentypen Integer/Ganzzahlen (int), Float/Gleikommazahlen sowie Dezimalzahlen belieber Genauigkeit.
i=1   # Zuweisung
i+=1  # i++ wie in C gibt es nicht
i*=2

i**2  # i "hoch" 2
docs.python.org: Operatortabelle: Numeric Types docs.python.org: Operatorentabelle für Sequenzen (Tuple, List, String, ...)
docs.python.org: Methoden von Strings docs.python.org: Operatortabelle: Mutable Sequence Types docs.python.org: Operatortabelle: Mapping Types

6 Sonstiges [toc]

Folgende Schlüsselworte haben eine besondere Bedeutung:
TrueBoolscher Wert für Wahr
FalseBoolscher Wert für Falsch
NoneLeerer Wert, NIL, Null-Pointer

7 Flusssteuerung [toc]

8 Funktionen [toc]

9 Python-Datei [toc]

Ein Python Script wird in einer Datei gespeichert, die mit ".py" endet. Als Vorlage kann folgende Datei dienen: reverse.py

Wie führt man nun dieses Programm aus?

Unter Unix ruft man es von der Shell auf:
python myscript.py
 
Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt (chmod a+rx myscript.py) kann man es direkt ausführen:
./myscript.py
 
Unter Windows kann man ein Script durch Doppelklick aus dem Explorer ausführen. Endet die Datei mit ".py" wird es in einer MS-DOS Eingabeaufforderung ausgeführt. Wenn es die Endung ".pyw" hat, wird es ohne zusätzlichem Fenster gestartet. Der Nachteil vom Anklicken ist, das man dem Script keine Argumente übergeben kann. Zur Not kann man das Script aus der MS-DOS Eingabeaufforderung aufrufen und dort Argumente übergeben.

Startet man ein Programm durch Doppelklick auf eine .py Datei, schließt sich das Fenster sobald das Script beendet ist. Möchte man, dass das Fenster offen bleibt, kann man ein "sys.stdin.readline()" am Ende einfügen.

Ein typischen Programm in Python:
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

# Python Imports
import os
import sys

def usage():
    print """Usage: %s
....
""" % (
        os.path.basename(sys.argv[0]))

def main():
    if len(sys.argv)==1:
        usage()
        sys.exit()

if __name__=="__main__":
    main()
Die Funktion "main" wird aufgerufen, wenn das Script aufgerufen wird.

Wird das Script von einer anderen Datei importiert (import myscript), wir die Main-Funktion nicht aufgerufen. Es werden dann nur die Funktionen und Klassen bereitgestellt.

10 Dateien [toc]

11 Klassen - Objektorientierung [toc]

12 Standardbibliothek [toc]

Ein Modul (bzw. Bibliothek) wird mit der import-Anweisung eingebunden. Die Funktionen, Variablen und Klassen dieses Moduls sind über den Modulnamen anzusprechen.
import sys
sys.argv[0] # Scriptname

from xml import sax
sax.parse(...)
Folgende Pakete gehören zur Standardbibliothek und sind in der Regel immer vorhanden. Da die gesamte Liste der Python Pakete inzwischen recht lang geworden ist, will ich hier die aus meiner Sicht wichtigsten Pakete aufzählen:

13 Externe Bibliotheken [toc]

14 Beispiele [toc]

15 Externe Links [toc]

Hier einige "Rezepte" aus dem Python Cookbook:

16 Nachteile von Python [toc]

Einige Dinge sind auch an Python nicht optimal:

17 Vergleich mit anderen Programmiersprachen [toc]

Siehe Vergleich von mir bekannten Programmiersprachen

18 Hinweise zur Python Programmierung [toc]

19 FAQ [toc]

20 Python++ [toc]

Folgende Abschnitte sind für Fortgeschrittene.
# Mit einer Schleife Leerzeichen am Anfang/Ende entfernen.
fruechte=[' Apfel  ', ' Banane ', '  Kiwi ', ' Ananas']
neue_fruechte=[]
for frucht in fruechte:
    frucht=frucht.strip()
    neue_fruechte.append(frucht.strip())
fruechte=neue_fruechte
# List Comprehension
fruechte=[frucht.strip() for frucht in fruechte]
class Zahl(object):
    def __init__(self, i):
        self.i=i
    def get_next(self):
        return self.i+1
    next=property(get_next)

zahl=Zahl(2)
print zahl.next # --> 3
Impliziter (versteckter) Funktionsaufruf. Es wird auf die Eigenschaft (das Attribut) 'next' zugegriffen. Im Hintergrund wird die Getter-Funktion get_next() aufgerufen. Siehe docs.python.org: Built-in Function property Mit einem Decorator wird eine Funktion 'verkleidet'. Folgendes Beispiel implementiert den Decorator 'commit_on_success'.
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
def begin():
    print 'begin'
def commit():
    print 'commit'
def rollback():
    print 'rollback'
def commit_on_success(func):
    """
    Führe commit() aus, falls die dekorierte Funktion keine Exception
    wirft. Ansonsten wird rollback() aufgerufen.
    """
    def _commit_on_success(*args, **kw):
        begin()
        try:
            res = func(*args, **kw)
        except Exception, e:
            rollback()
            raise # Re-raise (aufgefangene Exception erneut werfen)
        else:
            commit()
        return res
    return _commit_on_success

@commit_on_success
def foo(do_raise):
    if do_raise:
        raise Exception()

foo(False)  # --> commit()
foo(True)   # --> rollback()

'''
===> python deco.py
begin
commit
begin
rollback
Traceback (most recent call last):
  File "tmp/deco.py", line 32, in <module>
    foo(True)   # --> rollback()
  File "tmp/deco.py", line 17, in _commit_on_success
    res = func(*args, **kw)
  File "tmp/deco.py", line 29, in foo
    raise Exception()
Exception
'''
Generatoren verhalten sich wie Listen. Es wird 'on-the-fly' für jeden Schleifendurchlauf das aktuelle Element zurückgegeben. Dieses Verfahren verbraucht weniger Hauptspeicher. Hier eine Nachbildung der Funktion xrange():
def myxrange():
    i=0
    while True:
        yield i
        i+=1

for i in myxrange():
    print i
    if i==5:
        break
Siehe auch docs.python.org: Iterator Types und docs.python.org: The yield statement

21 Debugging Tipps [toc]

Hier einige Hinweise zum Auffinden von Fehlern:

22 About [toc]

Diese Seite entstand im Rahmen folgender Vorträge und Workshops:
© 2002-2008 Thomas Güttler. Der Text darf nach belieben kopiert und modifiziert werden, solange dieser Hinweis zum Copyright und ein Links zu dem Original unter www.thomas-guettler.de erhalten bleibt. Es wäre nett, wenn Sie mir Verbesserungsvorschläge mitteilen: guettli@thomas-guettler.de