Crashkurs
Crashkurs<reloaded>
Strukturierung durch Einrückungdef berechne_fakultaet(num): {    if num == 0: {        return 1    }    result = num * ber...
Strukturierung durch Einrückungdef berechne_fakultaet(num):    if num == 0:        return 1      result = num * berechne_f...
Strukturierung durch Einrückungdef berechne_fakultaet(num):....if num == 0:........return 1............result = num * bere...
Interaktiver InterpreterMacPro:~ klaus$ pythonPython 2.7 (r27:82500, Jul 26 2010, 10:14:29)[GCC 4.2.1 (Apple Inc. build 56...
Welche Version wählen?Python 2 oder Python 3?                               (         )• geringe Differenzen: viele Backpo...
ObjektorientierungPython kennt nur Objekte:                      type• Alle Datenobjekte sind vom Typ type• Alle Funktione...
Datenobjekte                 Type                                       Beispiel         variabel               Integer   ...
Listen>>> liste_1 = [1, 2, 3, 4]•Instanziierung eines Listen-Objekts durch: [ ]Python Crash Kurs - Klaus Bremer - FrOSCon ...
Listen>>> liste_1 = [1, 2, 3, 4]>>> liste_1[0]1•Instanziierung eines Listen-Objekts durch: [ ]•Listen-Index ist 0-basiert....
Listen>>> liste_1 = [1, 2, 3, 4]>>> liste_1[0]1>>> liste_1[-1]4•Instanziierung eines Listen-Objekts durch: [ ]•Listen-Inde...
Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[-1]9•Instanziierung eines Listen-Objekts...
Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[-1]9>>> liste_1[-2]8•Index-Zugriff „von ...
Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[1:3][1, 2]•Listen bieten Slicing: [p, q[...
Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[1:3][1, 2]>>> liste_1[:3][0, 1, 2]•Liste...
Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[1:3][1, 2]>>> liste_1[:3][0, 1, 2]>>> li...
Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[:][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]•Default...
Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[:][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> list...
Listen>>> liste_2 = [4, "five", berechne_fakultaet, liste_1]•Listen können beliebige Objekte enthaltenPython Crash Kurs - ...
Listen>>> liste_2 = [4, "five", berechne_fakultaet, liste_1]>>> liste_2[4, five, <function berechne_fakultaet at 0x1004846...
Listen>>> liste_2 = [4, "five", berechne_fakultaet, liste_1]>>> liste_2[4, five, <function berechne_fakultaet at 0x1004846...
Zeichenketten>>> text = Dies ist ein String>>> text[0]D>>> text[-1]g>>> text[-6:]String>>> text.split()[-1]String•Zeichenk...
Dictionaries>>> dict_1 = {"one": 1, "two": 2}•Dictionary: key-value-storagePython Crash Kurs - Klaus Bremer - FrOSCon 2012...
Dictionaries>>> dict_1 = {"one": 1, "two": 2}>>> dict_1{two: 2, one: 1}•Dictionary: key-value-storage•Inhalte unsortiertPy...
Dictionaries>>> dict_1 = {"one": 1, "two": 2}>>> dict_1{two: 2, one: 1}>>> dict_1["two"]2•Dictionary: key-value-storage•In...
Dictionaries>>> dict_1 = {"one": 1, "two": 2}>>> dict_1{two: 2, one: 1}>>> dict_1["liste_2"] = liste_2>>> dict_1{liste_2: ...
Dictionaries>>> dict_1 = {"one": 1, "two": 2}>>> dict_1["liste_2"] = liste_2>>> dict_1{liste_2: [4, five, <function berech...
LabelReferenzierung immutabler Datenobjekte:>>> a = b = 42                                                              La...
LabelReferenzierung immutabler Datenobjekte:>>> a = b = 42                                                              La...
LabelReferenzierung mutabler Datenobjekte:>>> l1 = [one]                                                            Label ...
LabelReferenzierung mutabler Datenobjekte:>>> l1 = [one]                                                            Label ...
LabelReferenzierung mutabler Datenobjekte:>>> l1 = [one]                                                            Label ...
LabelReferenzierung mutabler Datenobjekte:>>> l1 = [one]                                                            Label ...
Datenobjekte: boolscher Kontext           Datenobjekt                                boolscher Wert        Singleton      ...
Datenobjekte: boolscher KontextVorsicht vor Fließkommazahlen:>>> p = 3 * 2.7 / 3 - 2.7>>> p4.440892098500626e-16>>> if p:....
Kontrollanweisungen# if-then-else in Python:                                                   # Auswahl Vergleichsoperato...
Schleifen„for“ für Iterationen über gegebene Sequenzen>>> for n in range(20):                          # iteriert über n v...
Schleifen„while“ für Schleifen mit programmatischen Abbruch>>> import random>>> run = True>>> while run:...     r = random...
FunktionenErhalten Argumente und liefern Ergebnissedef berechne_fakultaet(num):    if num == 0:        return 1    result ...
FunktionenArgumente: Abgleich von links nach rechts>>> def booktitle(title, author):... 	 # title, author: required parame...
FunktionenArgumente: Abgleich von links nach rechts>>> def booktitle(title, author):... 	 # title, author: required parame...
FunktionenArgumente: Abgleich nach Argumentname>>> def booktitle(title, author):... 	 # title, author: required parameters...
FunktionenArgumente: Abgleich nach Position und Argumentname>>> def booktitle(title, author):... 	 # title, author: requir...
FunktionenArgumente: Defaultwerte>>> def booktitle(title, author=unknown):... 	 print "Author: %snTitle: %s" % (author, ti...
FunktionenArgumente: variable Anzahl# positionierte Argumente>>> def func(*args):... 	 print args...>>> func(1, 2, 42, vie...
FunktionenFunktionen sind Namensräume>>> def changer(x, y):... 	 x = 2... 	 y[0] = spam...>>> x = 1>>> z = [42, ham, eggs]...
FunktionenFunktionen sind Namensräume                                                                            LGB-Regel...
FunktionenFunktionen sind (wirklich!) Namensräume>>> x = 1>>> y = 2>>> def spam():... 	 print y... 	 print x... 	 x = 42.....
ModuleStrukturieren und Wiederverwertung von Code# datei: fakultaet.pydef berechne_fakultaet(num):    if num == 0:        ...
ModuleModule sind Namensräume# datei: main.pyimport fakultaetprint fakultaet.berechne_fakultaet(6)MacPro:module klaus$ pyt...
ModulePer Import werden externe Funktionen verfügbar# datei: main.pyimport fakultaetprint fakultaet.berechne_fakultaet(6)M...
ModuleModule werden beim Import ausgeführt# datei: main.py                                                            # da...
ModuleModule werden beim Import ausgeführt# datei: fakultaet.pydef berechne_fakultaet(num):    if num == 0:        return ...
ModuleModule sind Namensräumefrom fakultaet import berechne_fakultaet as fktdef calc_range(func, q):    result = []    for...
ModuleFunktionen sind Objekte!from fakultaet import berechne_fakultaet as fktdef calc_range(func, q):    result = []    fo...
KlassenKlassen erzeugen vielfache Instanz-Objekteclass Text(object):       def __init__(self, author=, text=):           s...
KlassenKlassen erzeugen vielfache Instanz-Objekteclass Text(object):       def __init__(self, author=, text=):           s...
KlassenKlassen erzeugen vielfache Instanz-Objekteclass Text(object):       def __init__(self, author=, text=):           s...
KlassenMethoden sind Funktionen in Klassenclass Text(object):       def __init__(self, author=, text=):           self.aut...
KlassenKlassen bieten Vererbungclass Article(Text):       def __init__(self, author=, text=, abstract=):           super(A...
KlassenKlassen sind Namensräumeclass Text(object):                                                                        ...
Exceptions>>> f = open(dummy.txt, r)Traceback (most recent call last):  File "<stdin>", line 1, in <module>IOError: [Errno...
Coding StylesMöglichst einheitliche Codierungimport this                             # nur ein Import pro Zeilefrom that i...
The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than impl...
The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than impl...
The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than impl...
The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than impl...
The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than impl...
just scratching the surface    </reloaded>
Nächste SlideShare
Wird geladen in …5
×

Python crash-kurs

3.061 Aufrufe

Veröffentlicht am

Einführung für Teilnehmer mit Programmierkenntnissen. (Froscon 2012)

Veröffentlicht in: Bildung, Technologie
0 Kommentare
3 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
3.061
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
4
Aktionen
Geteilt
0
Downloads
34
Kommentare
0
Gefällt mir
3
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Python crash-kurs

  1. 1. Crashkurs
  2. 2. Crashkurs<reloaded>
  3. 3. Strukturierung durch Einrückungdef berechne_fakultaet(num): { if num == 0: { return 1 } result = num * berechne_fakultaet(num - 1) return result}Python kennt keine Klammern für { Codeblöcke }Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 3
  4. 4. Strukturierung durch Einrückungdef berechne_fakultaet(num): if num == 0: return 1 result = num * berechne_fakultaet(num - 1) return resultWhitespaces am Zeilenanfang sind syntaktisch relevant1 Tabulator entspricht 8 LeerzeichenPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 4
  5. 5. Strukturierung durch Einrückungdef berechne_fakultaet(num):....if num == 0:........return 1............result = num * berechne_fakultaet(num - 1)....return result....Konvention:Einrücktiefe pro Block: 4 LeerzeichenVerwende nur Leerzeichen, keine Tabulatoren!Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 5
  6. 6. Interaktiver InterpreterMacPro:~ klaus$ pythonPython 2.7 (r27:82500, Jul 26 2010, 10:14:29)[GCC 4.2.1 (Apple Inc. build 5659)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> def berechne_fakultaet(num):... if num == 0:... return 1... result = num * berechne_fakultaet(num - 1)... return result...>>> berechne_fakultaet(2)2>>> berechne_fakultaet(3)6>>> berechne_fakultaet(6)720Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 6
  7. 7. Welche Version wählen?Python 2 oder Python 3? ( )• geringe Differenzen: viele Backports von Python 3 nach Python 2.7• 2to3-Tool: z.B.: „print n“ „print(n)“• Problem: externe LibrariesPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 7
  8. 8. ObjektorientierungPython kennt nur Objekte: type• Alle Datenobjekte sind vom Typ type• Alle Funktionen und Klassen sind vom Typ type• Objekte vom Typ type sind „callable“Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 8
  9. 9. Datenobjekte Type Beispiel variabel Integer 42 immutable Float 42.0 immutable String „python“ immutable List [42, „python“, 42.0] mutable Tuple (42, „python“, 42.0) immutable Dictionary {„one“: 1, 2: „two“} mutablePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 9
  10. 10. Listen>>> liste_1 = [1, 2, 3, 4]•Instanziierung eines Listen-Objekts durch: [ ]Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 10
  11. 11. Listen>>> liste_1 = [1, 2, 3, 4]>>> liste_1[0]1•Instanziierung eines Listen-Objekts durch: [ ]•Listen-Index ist 0-basiert.Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 11
  12. 12. Listen>>> liste_1 = [1, 2, 3, 4]>>> liste_1[0]1>>> liste_1[-1]4•Instanziierung eines Listen-Objekts durch: [ ]•Listen-Index ist 0-basiert.•Index-Zugriff „von hinten“ möglich: [-1]Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 12
  13. 13. Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[-1]9•Instanziierung eines Listen-Objekts durch: [ ]•Listen-Index ist 0-basiert.•Index-Zugriff „von hinten“ möglich: [-1]Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 13
  14. 14. Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[-1]9>>> liste_1[-2]8•Index-Zugriff „von hinten“ möglich: [-2]Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 14
  15. 15. Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[1:3][1, 2]•Listen bieten Slicing: [p, q[Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 15
  16. 16. Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[1:3][1, 2]>>> liste_1[:3][0, 1, 2]•Listen bieten Slicing: [p, q[•Default: [:n] entspricht [0:n]Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 16
  17. 17. Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[1:3][1, 2]>>> liste_1[:3][0, 1, 2]>>> liste_1[3:][3, 4, 5, 6, 7, 8, 9]•Listen bieten Slicing: [p, q[•Default: [:n] entspricht [0:n]•Default: [m:] entspricht [m:0]Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 17
  18. 18. Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[:][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]•Default: [:] entspricht [0:0] (Kopie)Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 18
  19. 19. Listen>>> liste_1 = range(10)>>> liste_1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[:][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> liste_1[::3][0, 3, 6, 9]•Default: [:] entspricht [0:0] (Kopie)•Slicing mit Intervall möglich: [m:n:i]Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 19
  20. 20. Listen>>> liste_2 = [4, "five", berechne_fakultaet, liste_1]•Listen können beliebige Objekte enthaltenPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 20
  21. 21. Listen>>> liste_2 = [4, "five", berechne_fakultaet, liste_1]>>> liste_2[4, five, <function berechne_fakultaet at 0x1004846e0>, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]>>> liste_2[-1][-1]9•Listen können beliebige Objekte enthalten•Aufbau komplexer Datenstrukturen möglichPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 21
  22. 22. Listen>>> liste_2 = [4, "five", berechne_fakultaet, liste_1]>>> liste_2[4, five, <function berechne_fakultaet at 0x1004846e0>, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]>>> liste_2[-1][-1]9>>> liste_2[2](6)720•Listen können beliebige Objekte enthalten•Aufbau komplexer Datenstrukturen möglich•Funktionsaufrufe aus Listen möglichPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 22
  23. 23. Zeichenketten>>> text = Dies ist ein String>>> text[0]D>>> text[-1]g>>> text[-6:]String>>> text.split()[-1]String•Zeichenketten sind Sequenzen•Zeichenketten sind Objekte mit MethodenPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 23
  24. 24. Dictionaries>>> dict_1 = {"one": 1, "two": 2}•Dictionary: key-value-storagePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 24
  25. 25. Dictionaries>>> dict_1 = {"one": 1, "two": 2}>>> dict_1{two: 2, one: 1}•Dictionary: key-value-storage•Inhalte unsortiertPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 25
  26. 26. Dictionaries>>> dict_1 = {"one": 1, "two": 2}>>> dict_1{two: 2, one: 1}>>> dict_1["two"]2•Dictionary: key-value-storage•Inhalte unsortiert•Zugriff per „key“Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 26
  27. 27. Dictionaries>>> dict_1 = {"one": 1, "two": 2}>>> dict_1{two: 2, one: 1}>>> dict_1["liste_2"] = liste_2>>> dict_1{liste_2: [4, five, <function berechne_fakultaet at 0x1004846e0>, [0, 1, 2,3, 4, 5, 6, 7, 8, 9]], two: 2, one: 1}•Dictionary: key-value-storage•Inhalte unsortiert•Zugriff per „key“•Beliebige Objekte als „value“Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 27
  28. 28. Dictionaries>>> dict_1 = {"one": 1, "two": 2}>>> dict_1["liste_2"] = liste_2>>> dict_1{liste_2: [4, five, <function berechne_fakultaet at 0x1004846e0>, [0, 1, 2,3, 4, 5, 6, 7, 8, 9]], two: 2, one: 1}>>> dict_1["two"]2>>> dict_1["liste_2"][-1][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> dict_1["liste_2"][2](6)720•Dictionary: key-value-storage•Inhalte unsortiert•Zugriff per „key“•Beliebige Objekte als „value“Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 28
  29. 29. LabelReferenzierung immutabler Datenobjekte:>>> a = b = 42 Label Objekt>>> a, b(42, 42)>>> a 42 b•Daten sind Objekte•„Variable“ sind Referenzen (Label) auf diese ObjektePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 29
  30. 30. LabelReferenzierung immutabler Datenobjekte:>>> a = b = 42 Label Objekt>>> a, b(42, 42)>>> b = 4 a 42>>> a, b(42, 4)>>> b 4•Daten sind Objekte•„Variable“ sind Referenzen (Label) auf diese ObjektePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 30
  31. 31. LabelReferenzierung mutabler Datenobjekte:>>> l1 = [one] Label Objekt l1 [one]•Daten sind Objekte•„Variable“ sind Referenzen (Label) auf diese ObjektePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 31
  32. 32. LabelReferenzierung mutabler Datenobjekte:>>> l1 = [one] Label Objekt>>> l2 = l1 l1 [one] l2•Daten sind Objekte•„Variable“ sind Referenzen (Label) auf diese ObjektePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 32
  33. 33. LabelReferenzierung mutabler Datenobjekte:>>> l1 = [one] Label Objekt>>> l2 = l1>>> l2.append(two) l1 [one] l2 .append(two) [one, two]•Daten sind Objekte•„Variable“ sind Referenzen (Label) auf diese ObjektePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 33
  34. 34. LabelReferenzierung mutabler Datenobjekte:>>> l1 = [one] Label Objekt>>> l2 = l1>>> l2.append(two)>>> l1 l1 [one][one, two] l2 .append(two) [one, two]•Daten sind Objekte•„Variable“ sind Referenzen (Label) auf diese ObjektePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 34
  35. 35. Datenobjekte: boolscher Kontext Datenobjekt boolscher Wert Singleton True True ja False False ja None False ja 0 False 0.0 False 1 True [] False {} False "" False "" TruePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 35
  36. 36. Datenobjekte: boolscher KontextVorsicht vor Fließkommazahlen:>>> p = 3 * 2.7 / 3 - 2.7>>> p4.440892098500626e-16>>> if p:... print True... else:... print False...TruePython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 36
  37. 37. Kontrollanweisungen# if-then-else in Python: # Auswahl Vergleichsoperatoren:>>> a = 1 >>> a = 1>>> if a == 42: >>> b = 42... print "Das ist die Antwort" >>> a != b... elif a == 41: True... print "knapp daneben" >>> a < b... elif a == 43: True... print "auch daneben" >>> c = 43... else: >>> a < b < c... print "leider ganz falsch" True...leider ganz falschPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 37
  38. 38. Schleifen„for“ für Iterationen über gegebene Sequenzen>>> for n in range(20): # iteriert über n von [0, 20[... if not n % 3:... continue # erzwingt nächsten Schleifendurchlauf... if n > 10:... break # erzwingt Schleifenabbruch... print n...12457810>>>Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 38
  39. 39. Schleifen„while“ für Schleifen mit programmatischen Abbruch>>> import random>>> run = True>>> while run:... r = random.random()... run = r < 0.8... print r...0.7832836397820.2826156585760.821162495507>>>Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 39
  40. 40. FunktionenErhalten Argumente und liefern Ergebnissedef berechne_fakultaet(num): if num == 0: return 1 result = num * berechne_fakultaet(num - 1) return resultAllgemein:def <name>(arg1, arg2, ... argN): <statements> return <value>Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 40
  41. 41. FunktionenArgumente: Abgleich von links nach rechts>>> def booktitle(title, author):... # title, author: required parameters... print "Author: %snTitle: %s" % (author, title)...>>> booktitle(Solaris, Lem)Author: LemTitle: SolarisPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 41
  42. 42. FunktionenArgumente: Abgleich von links nach rechts>>> def booktitle(title, author):... # title, author: required parameters... print "Author: %snTitle: %s" % (author, title)...>>> booktitle(Solaris, Lem)Author: LemTitle: Solaris>>> booktitle(Der Hobbit)Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: booktitle() takes exactly 2 arguments (1 given)Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 42
  43. 43. FunktionenArgumente: Abgleich nach Argumentname>>> def booktitle(title, author):... # title, author: required parameters... print "Author: %snTitle: %s" % (author, title)...>>> booktitle(Solaris, Lem)Author: LemTitle: Solaris>>> booktitle(author=Tolkien, title=Der Hobbit)Author: TolkienTitle: Der HobbitPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 43
  44. 44. FunktionenArgumente: Abgleich nach Position und Argumentname>>> def booktitle(title, author):... # title, author: required parameters... print "Author: %snTitle: %s" % (author, title)...>>> booktitle(Solaris, author=Lem)Author: LemTitle: Solaris>>> booktitle(author=Lem, Solaris) File "<stdin>", line 1SyntaxError: non-keyword arg after keyword argPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 44
  45. 45. FunktionenArgumente: Defaultwerte>>> def booktitle(title, author=unknown):... print "Author: %snTitle: %s" % (author, title)...>>> booktitle(Der Schwarm)Author: unknownTitle: Der Schwarm>>> booktitle(Der Schwarm, Frank Schätzing)Author: Frank SchätzingTitle: Der Schwarm>>> booktitle(Der Schwarm, author=Frank Schätzing)Author: Frank SchätzingTitle: Der SchwarmPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 45
  46. 46. FunktionenArgumente: variable Anzahl# positionierte Argumente>>> def func(*args):... print args...>>> func(1, 2, 42, vier)(1, 2, 42, vier)# keyword Argumente>>> def func(**kwargs):... print kwargs...>>> func(author=Lem, title=Solaris){title: Solaris, author: Lem}Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 46
  47. 47. FunktionenFunktionen sind Namensräume>>> def changer(x, y):... x = 2... y[0] = spam...>>> x = 1>>> z = [42, ham, eggs]>>> changer(x, z)>>> x1>>> z[spam, ham, eggs]Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 47
  48. 48. FunktionenFunktionen sind Namensräume LGB-Regel:>>> x = 1>>> y = 2 local>>> z = 5 global buildin>>> def spam():... global y... x = 42... y = 3... print x, y, z...>>> spam()42 3 5>>> print x, y, z1 3 5Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 48
  49. 49. FunktionenFunktionen sind (wirklich!) Namensräume>>> x = 1>>> y = 2>>> def spam():... print y... print x... x = 42... print x...>>> spam()2Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in spamUnboundLocalError: local variable x referenced before assignmentPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 49
  50. 50. ModuleStrukturieren und Wiederverwertung von Code# datei: fakultaet.pydef berechne_fakultaet(num): if num == 0: return 1 result = num * berechne_fakultaet(num - 1) return resultprint berechne_fakultaet(5)MacPro:module klaus$ python2.7 fakultaet.py120Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 50
  51. 51. ModuleModule sind Namensräume# datei: main.pyimport fakultaetprint fakultaet.berechne_fakultaet(6)MacPro:module klaus$ python2.7 main.py120720Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 51
  52. 52. ModulePer Import werden externe Funktionen verfügbar# datei: main.pyimport fakultaetprint fakultaet.berechne_fakultaet(6)MacPro:module klaus$ python2.7 main.py120720Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 52
  53. 53. ModuleModule werden beim Import ausgeführt# datei: main.py # datei: fakultaet.py def berechne_fakultaet(num):import fakultaet if num == 0:print fakultaet.berechne_fakultaet(6) return 1 result = num * berechne_fakultaet(num - 1) return result print berechne_fakultaet(5)MacPro:module klaus$ python2.7 main.py120720Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 53
  54. 54. ModuleModule werden beim Import ausgeführt# datei: fakultaet.pydef berechne_fakultaet(num): if num == 0: return 1 result = num * berechne_fakultaet(num - 1) return resultif __name__ == __main__: print berechne_fakultaet(5)Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 54
  55. 55. ModuleModule sind Namensräumefrom fakultaet import berechne_fakultaet as fktdef calc_range(func, q): result = [] for p in q: result.append(func(p)) return resultif __name__ == __main__: result = calc_range(fkt, range(6)) print resultPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 55
  56. 56. ModuleFunktionen sind Objekte!from fakultaet import berechne_fakultaet as fktdef calc_range(func, q): result = [] for p in q: result.append(func(p)) return resultif __name__ == __main__: result = calc_range(fkt, range(6)) print resultMacPro:module klaus$ python2.7 facultator.py[1, 1, 2, 6, 24, 120]Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 56
  57. 57. KlassenKlassen erzeugen vielfache Instanz-Objekteclass Text(object): def __init__(self, author=, text=): self.author = author self.text = text>>> text1 = Text(author=Lem, text=Solaris ist ein dickes Buch)Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 57
  58. 58. KlassenKlassen erzeugen vielfache Instanz-Objekteclass Text(object): def __init__(self, author=, text=): self.author = author self.text = text>>> text1 = Text(author=Lem, text=Solaris ist ein dickes Buch)>>> text1.textSolaris ist ein dickes BuchPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 58
  59. 59. KlassenKlassen erzeugen vielfache Instanz-Objekteclass Text(object): def __init__(self, author=, text=): self.author = author self.text = text>>> text1 = Text(author=Lem, text=Solaris ist ein dickes Buch)>>> text1.textSolaris ist ein dickes Buch>>> text2 = Text()>>> text2.author=Preussler>>> text2.text=Das kleine Gespenst.>>> text2.textDas kleine Gespenst.Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 59
  60. 60. KlassenMethoden sind Funktionen in Klassenclass Text(object): def __init__(self, author=, text=): self.author = author self.text = text def teaser(self, length=3): words = self.text.split( ) limit = min(len(words), length) return .join(words[:limit])>>> text1 = Text(author=Lem, text=Solaris ist ein dickes Buch)>>> text1.teaser()Solaris ist einPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 60
  61. 61. KlassenKlassen bieten Vererbungclass Article(Text): def __init__(self, author=, text=, abstract=): super(Article, self).__init__(author, text) self.abstract = abstract def teaser(self, length=3): words = self.abstract.split( ) limit = min(len(words), length) return .join(words[:limit])>>> art1 = Article(Lem, Solaris ist ein dickes Buch, Ein Klassiker von Lem)>>> art1.teaser(2)Ein Klassiker>>> art1.authorLemPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 61
  62. 62. KlassenKlassen sind Namensräumeclass Text(object): Vererbung self.author durchsucht self.text Namensraum- Bäumeclass Article(Text): self.abstractPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 62
  63. 63. Exceptions>>> f = open(dummy.txt, r)Traceback (most recent call last): File "<stdin>", line 1, in <module>IOError: [Errno 2] No such file or directory: dummy.txt>>> try:... f = open(dummy.txt, r)... except IOError:... print file not found...file not found• Better ask for forgivness than for permissionPython Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 63
  64. 64. Coding StylesMöglichst einheitliche Codierungimport this # nur ein Import pro Zeilefrom that import * # vermeide diesesPAGE_SIZE = "A4" # Konstanten in Uppercaseclass CamelCaseNaming(object): def method_with_underlines(self): pass # indent 4 spaces, no tabs!def formatiere_artikel(): # verwende beschreibende Bezeichner is_public = False # boolean: is has_content = True # boolean: has text = ein Text # ein Text: Einzahl texts = [] # viele Texte: MehrzahlPEP8: http://www.python.org/dev/peps/pep-0008/Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 64
  65. 65. The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases arent special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless youre Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, its a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- lets do more of those!Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 65
  66. 66. The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases arent special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless youre Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, its a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- lets do more of those!Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 66
  67. 67. The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases arent special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless youre Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, its a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- lets do more of those!Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 67
  68. 68. The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases arent special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless youre Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, its a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- lets do more of those!Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 68
  69. 69. The Zen of Python>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases arent special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless youre Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, its a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- lets do more of those!Python Crash Kurs - Klaus Bremer - FrOSCon 2012, 26.08.2012, St. Augustin 69
  70. 70. just scratching the surface </reloaded>

×