Handout

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.
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
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
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
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
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?
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 }
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
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
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
1
2
3
4
>>> with open('/etc/issue.net') as issue:
...
print(issue.read())
...
Debian GNU/Linux 8
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