Folien

Werbung
LATEX, Linux, Python
Daniel Borchmann, Tom Hanika, Maximilian Marx
31. Januar 2015
cba
Programmieren mit Python
Ziele des Abschnitts
Ziele
This space intentionally left blank.
Ziele des Abschnitts
Ziele
This space intentionally left blank.
Interaktiv!
Ziele des Abschnitts
Ziele
This space intentionally left blank.
Interaktiv!
Python installieren:
https://www.python.org/downloads/
hier: Python 3.2+
Programmieren mit Python
Funktionen und Objekte
Funktionen und Objekte
Klassen
Konstruktoren
Klassen-/Instanzvariablen
Funktionen und Objekte
Klassen
Konstruktoren
Klassen-/Instanzvariablen
1
2
3
4
class Spam():
eggs = []
def __init__(self, bacon):
self.bacon = bacon
Funktionen und Objekte
Klassen
Konstruktoren
Klassen-/Instanzvariablen
1
2
3
4
class Spam():
eggs = []
def __init__(self, bacon):
self.bacon = bacon
Python 2:
1

2
3
4
class Spam(object):
eggs = []
def __init__(self, bacon):
self.bacon = bacon
Funktionen und Objekte
Klassen
Konstruktoren
Klassen-/Instanzvariablen
Funktionen und Objekte
Klassen
1
2
3
4
Konstruktoren
Klassen-/Instanzvariablen
class Spam():
eggs = []
def __init__(self, bacon):
self.bacon = bacon
Funktionen und Objekte
Klassen
1
2
3
4
1
2
3
4
5
6
7
8
Konstruktoren
Klassen-/Instanzvariablen
class Spam():
eggs = []
def __init__(self, bacon):
self.bacon = bacon
>>> x = Spam(23)
>>> y = Spam(42)
>>> x.eggs, x.bacon
([], 23)
>>> x.eggs.append(42)
>>> x.bacon += 1
>>> y.eggs, x.bacon, y.bacon
([42], 24, 42)
Funktionen und Objekte
Methoden
Funktionen in Klassen
Klasseninstanz als (explizites) erstes Argument
Funktionen und Objekte
Methoden
1
2
3
4
5
Funktionen in Klassen
Klasseninstanz als (explizites) erstes Argument
class Spam():
def __init__(self, bacon):
self.bacon = bacon
def spam(self):
print(self.bacon)
Funktionen und Objekte
Methoden
1
2
3
4
5
1
2
3
4
5
6
Funktionen in Klassen
Klasseninstanz als (explizites) erstes Argument
class Spam():
def __init__(self, bacon):
self.bacon = bacon
def spam(self):
print(self.bacon)
>>> x = Spam('eggs')
>>> y = Spam('bacon')
>>> x.spam()
eggs
>>> y.spam()
bacon
Funktionen und Objekte
Eigenschaften
Attribute statt Funktionen
Funktionen und Objekte
Eigenschaften
Attribute statt Funktionen
1
2
3
4
5
6
7
class Spam():
def __init__(self):
self._eggs = 0
def eggs(self):
self._eggs += 1
print('{}␣eggs'.format(self._eggs))
eggs = property(eggs)
Funktionen und Objekte
Eigenschaften
Attribute statt Funktionen
1
2
3
4
5
6
7
1
2
3
4
5
class Spam():
def __init__(self):
self._eggs = 0
def eggs(self):
self._eggs += 1
print('{}␣eggs'.format(self._eggs))
eggs = property(eggs)
>>> x = Spam()
>>> x.eggs
1 eggs
>>> x.eggs
2 eggs
Funktionen und Objekte
Gibt’s das auch mit Zucker?
Dekoratoren als Kurzschreibweise
Funktionen und Objekte
Gibt’s das auch mit Zucker?
1
2
3
4
5
6
7
8
9
10
Dekoratoren als Kurzschreibweise
class Spam():
def __init__(self):
self._eggs = 0
@property
def eggs(self):
self._eggs += 1
print('{}␣eggs'.format(self._eggs))
@eggs.setter
def eggs(self, n):
self._eggs = n
Funktionen und Objekte
Gibt’s das auch mit Zucker?
1
2
3
4
5
6
7
8
9
10
1
2
3
Dekoratoren als Kurzschreibweise
class Spam():
def __init__(self):
self._eggs = 0
@property
def eggs(self):
self._eggs += 1
print('{}␣eggs'.format(self._eggs))
@eggs.setter
def eggs(self, n):
self._eggs = n
>>> x = Spam(); x.eggs = 41
>>> x.eggs
42 eggs
Programmieren mit Python
Comprehensions
Comprehensions
Listen
A = { x + 1 | x ∈ [1, 10) }
B = { x + 1 | x ∈ A, x = 2 mod 3 }
Comprehensions
Listen
A = { x + 1 | x ∈ [1, 10) }
B = { x + 1 | x ∈ A, x = 2 mod 3 }
1
2
3
4
5
6
>>>
>>>
>>>
[2,
>>>
[3,
a = [x + 1 for x in range(1, 10)]
b = [x + 1 for x in a if x % 3 == 2]
a
3, 4, 5, 6, 7, 8, 9, 10]
b
6, 9]
Comprehensions
Sequenzen
Auch für Sets und Dictionaries
Faulheit: Generator-Ausdrücke
Comprehensions
Sequenzen
Auch für Sets und Dictionaries
Faulheit: Generator-Ausdrücke
1
2
3
4
5
6
7
8
>>> {x % 3 for x in range(1, 10)}
{0, 1, 2}
>>> {w: len(w) for w in ['eggs', 'bacon', 'spam']}
{'spam': 4, 'eggs': 4, 'bacon': 5}
>>> (x % 3 for x in range(1, 1000))
<generator object <genexpr> at 0x7fe12484be10>
>>> len(list(_))
999
Programmieren mit Python
Module
Module
Import
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>>
>>>
0.0
>>>
>>>
0.0
>>>
>>>
0.0
>>>
>>>
0.0
>>>
>>>
0.0
import math
math.sin(0)
import math as m
m.sin(0)
from math import sin, cos
sin(0)
from math import sin as s
s(0)
from math import *
tan(0)
Module
Batteries included
Nützliche Module in der Standardbibliothek
Textverarbeitung: re, string, textwrap
Mathematik: decimal, fractions, math, random, statistics
Funktionen: functools, itertools, operator
Sonstiges: argparse, logging, multiprocessing, os
Ostereier: antigravity, this
…
Module
Exkurs: Hausaufgabe
1
2
3
from math import log, ceil
from operator import mul
from functools import reduce
4
5
6
def factorial(n):
return reduce(mul, range(1, n + 1))
7
8
9
10
def digit_sum(n):
def digit(n, idx):
return n // 10 ** idx % 10
11
def digits(n):
return range(0, ceil(log(n, 10)) + 1)
12
13
14
15
return sum([digit(n, i) for i in digits(n)])
Programmieren mit Python
Exceptions
Exceptions
Fehlerbehandlung
1
2
3
4
5
6
7
8
try:
print(1 // int(input('>␣i␣=␣')))
except ZeroDivisionError:
print('Division␣by␣zero')
except Exception as e:
print(repr(e))
else:
print('no␣error')
Exceptions
Fehlerbehandlung
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
try:
print(1 // int(input('>␣i␣=␣')))
except ZeroDivisionError:
print('Division␣by␣zero')
except Exception as e:
print(repr(e))
else:
print('no␣error')
> i = 0
Division by zero
> i = a
ValueError("invalid␣literal␣for␣int()␣with␣base␣10:␣'a'",)
> i = 1
1
no error
Programmieren mit Python
IO
IO
Kontext
open liefert File-Instanz
Automatisches Aufräumen
IO
Kontext
open liefert File-Instanz
Automatisches Aufräumen
1
2
3
4
>>> with open('/etc/issue.net') as issue:
...
print(issue.read())
...
Debian GNU/Linux 8
IO
Schreiben
Ausgabe analog
IO
Schreiben
Ausgabe analog
1
2
3
4
5
6
7
8
>>> with open('spam.txt', mode='w') as spam:
...
for i in range(1, 5):
...
spam.write('{}\n'.format(i))
...
2
2
2
2
Programmieren mit Python
Ausblick
Ausblick
Ausblick
PEP-8: Python Style Guide
(https://www.python.org/dev/peps/pep-0008/)
Selbstdefinierte Dekoratoren, Ausnahmen, Kontexte
Generatoren (Lazy evaluation)
Splicing
Operatorüberladung
Packages
Herunterladen