Programmierkurs Python I

Ähnliche Dokumente
Programmierkurs Python I

Programmierkurs Python I

Programmieren in Python

Informatik I. 4. Funktionen: Aufrufe und Definitionen. 25. Oktober Albert-Ludwigs-Universität Freiburg. Informatik I.

Python-Workshop. Python für C/C++ Programmierer. Carl Friedrich Bolz. Carl Friedrich Bolz

Praktische Anwendung von Metaklassen

Grundlagen von Python

Die freie Programmiersprache Python mit Beispielen für ihren praktischen Einsatz. Python User Group Köln

Programmierung in Python

1 Bedingungen und der Typ bool. Informatik I: Einführung in die Programmierung 5. Bedingungen, bedingte Ausführung und Schleifen. Vergleichsoperatoren

Funktionales Programmieren in Python

Programmierkurs Python I

Skriptsprachen am Beispiel Python

10 Objektorientierte Programmierung, Teil 1

Programmierkurs Python I

Beispiel 19. December 4, 2009

Programmierkurs Python

OOP - Objektorientierte Programmierung

C.3 Funktionen und Prozeduren

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kurzeinführung in Python

AuD-Tafelübung T-B5b

Die Programmiersprache C Eine Einführung

Kapitel 2 Ihr erstes Python-Programm

Python so macht Programmieren Spass

Programmieren in Python

Kontrollstrukturen MySQL Funktionen. MySQL 4, 5. Kapitel 20a: PHP Teil 2. Marcel Noe

12) Generische Datenstrukturen

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Algorithmen und Datenstrukturen

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Einstieg in die Informatik mit Java

Programmieren I. Kapitel 5. Kontrollfluss

Listenverarbeitung in Python

Java I Vorlesung 6 Referenz-Datentypen

Objektorientierte Programmierung OOP

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Einführung in Python Teil I Grundlagen

Innere Klassen in Java

Methoden (fortgeschritten) in C# - 1

Kompetent objektorientiert programmieren

C- Kurs 04 Anweisungen

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

12) Generische Datenstrukturen

Vorlesung Programmieren

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Monaden in anderen Programmiersprachen

Interpreter - Gliederung

Schleifen in C/C++/Java

Kompaktkurs Python Einführung in die Programmierung zur Numerik mit Python

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Repetitorium Informatik (Java)

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einfache Rechenstrukturen und Kontrollfluss II

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Neue Features in C# 2.0

PROGRAMMIERUNG IN JAVA

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik

Welche Informatik-Kenntnisse bringen Sie mit?

4 Kontrollfluss-Diagramme

28. April Python ist eine Interpreter Sprache. einfach durch eigene C Module erweiterbar. Daten werden dynamisch getypt

Scala & Lift. Ferenc Lajko

Informatik II Musterlösung

Strukturierte Objekttypen

Generische Datenstrukturen

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Objektorientierte Programmierung. Kapitel 12: Interfaces

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

JavaScript und PHP-Merkhilfe

Informatik I. Informatik I. 6.1 Programme. 6.2 Programme schreiben. 6.3 Programme starten. 6.4 Programme entwickeln. 6.1 Programme.

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Klassendefinitionen verstehen

Theorie zu Übung 8 Implementierung in Java

Objektorientierte Programmierung

JSP JSTL. JEE Vorlesung Teil 6. Ralf Gitzel

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

Einführung in die Programmierung Wintersemester 2011/12

Programmierkurs Python

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Einführung in die C-Programmierung

Gewöhnliche Differentialgleichungen (ODEs) I

Programmieren mit Python

Ruby. Erfinder: Yukihiro Matsumoto Japan 1993 Einflüsse: Smalltalk Perl Eigenschaften: Objektorientiert Interpretiert

Ergebnisse der Untersuchung zur Eignung einer Programmiersprache für die schnelle Softwareentwicklung kann der Informatikunterricht davon profitieren?

Einführung in die Objekt-Orientierte Programmierung

Objektorientierte Programmierung

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Programmierkurs Java


Oracle 12c: Neuerungen in PL/SQL. Roman Pyro DOAG 2014 Konferenz

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

LINQ. LANGUAGE INTEGREATED QUERY.net 3.5. Bernhard Grojer

Transkript:

Programmierkurs Python I Michaela Regneri & Stefan Thater Universität des Saarlandes FR 4.7 Allgemeine Linguistik (Computerlinguistik) Winter 200/ Übersicht Mehr zum Thema Iteratoren: List Comprehensions Generator-Ausdrücke Klassen-Methoden Dekoratoren 2

List Comprehensions List-Comprehensions sind eine elegante Alternative zu map, filter, etc. Syntax (einfache Variante) [ expr for var in iterable ] Der Ausdruck wertet zu einer Liste aus, die für jedes Element var in iterable den entsprechenden Wert für expr enthält. Beispiel: [x + for x in [,2,3]] [2,3,4] 3 map vs. List Comprehensions >>> list(map(lambda x: x + 3, [,2,3])) [4,5,6] >>> [x + 3 for x in [,2,3]] [4,5,6] Die Verwendung von List- Comprehensions führt im Vergleich zu map + lambda häufig zu einfacherem und besser lesbarem Code 4

List Comprehensions List-Comprehensions können mehrere for-schleifen enthalten. [x + y for x in [,2,3] for y in [4,5,6]] [5,6,7,6,7,8,7,8,9] Der Ausdruck ist (weitgehend) äquivalent zu result nach Abarbeiten des Codes: result = [] for x in [,2,3]: for y in [4,5,6]: result.append(x + y) 5 List Comprehensions List-Comprehensions können Bedingungen enthalten Bedingungen können irgendwo nach dem ersten for-konstrukt stehen, aber nach Einführung der benutzen Variablen Zum Beispiel: [x for x in [2,3] if x % 2 == 0] [2] [x + y for x in [2,3] if x % 2 == 0 for y in [5,6]] [7, 8] [x + y for x in [2,3] for y in [5,6] if x % 2 == 0] [7, 8] 6

List Comprehensions [ expr for var in iterable ] expr ist ein beliebiger Ausdruck typischerweise enthält expr die Variable var das muss aber nicht so sein: [ for x in range(3)] [,,] man kann Comprehensions auch schachteln mat = [[,2,3], [4,5,6], [7,8,9]] [[row[i] for row in mat] for i in [0,, 2]] [[, 4, 7], [2, 5, 8], [3, 6, 9]] 7 List Comprehensions [ expr for var in iterable ] Die Variable var ist nur innerhalb der List-Comprehension sichtbar (neu in Python 3.x) >>> x = 3 >>> x 3 >>> [x + for x in range(5)] [, 2, 3, 4, 5] >>> x 3 8

Generator Expressions Variante der List-Comprehensions: ( expr for var in iterable ) (erweiterte Syntax entsprechend) Statt zu einer Liste wertet dieser Ausdruck zu einem Iterator aus. Wenn die Comprehension das einzige Argument in einem Funktionsaufruf ist, kann man die Klammer weglassen sum(x*x for x in [,2,3]) 4 9 And now for something completely different

Klassen & Objekte (Wdh.) >>> c = Counter() >>> c2 = Counter() >>> c.count() >>> c.count() 2 >>> c2.count() >>> c.count() 3 class Counter: def init (self): self.counter = 0 def count(self): self.counter += return self.counter Normalerweise werden Daten in Objekt-Instanzen ( self ) gespeichert. Jede Instanz hat ihre eigenen Daten Klassen-Variablen >>> o = MyClass() >>> o.getcount() >>> o.getcount2() >>> o2 = MyClass() >>> o2.getcount() 2 >>> o.getcount() 2 class MyClass: count = 0 def init (self): MyClass.count += def getcount(self): return MyClass.count def getcount2(self): return self.count Klassen-Variablen gehören zur Klasse statt zum Objekt Sie haben für alle Instanzen (Objekte) den gleichen Wert 2

Klassen-Variablen Zugriff auf Klassen-Variablen: class. name =... & & & & & & (Schreiben) class. name oder object. name # # (Lesen) Attribut-Zugriff ( object. name ) erst in der Instanz nachsehen dann in der Klasse Instanz-Variablen gleichen Namens überdecken ( hide ) die Klassen-Variable! 3 Klassen-Variablen Achtung >>> o = MyClass() >>> o.getcount() 0 >>> o.getcount2() >>> o2 = MyClass() >>> o2.getcount() 0 >>> o2.getcount2() class MyClass: count = 0 def init (self): self.count += def getcount(self): return MyClass.count def getcount2(self): return self.count Warum? 4

Klassen-Methoden class MyDict(dict): @classmethod def fromkeys(cls, keys, default = None): return cls((key, default) for key in keys) >>> MyDict.fromKeys([,2,3]) {: None, 2: None, 3: None} Neben Klassen-Variablen gibt es auch Klassen- Methoden Unterschied zu normalen Methoden: das erste Argument ist die Klasse, nicht die Instanz (self). 5 Statische Methoden Neben Klassen-Methoden gibt es auch statische Methoden Diese werden mit @staticmethod ausgezeichnet und nehmen keine impliziten Argumente (kein cls bzw. self). Statische Methoden sollte nach Möglichkeit vermieden werden (stattdessen Klassen-Methoden verwenden). 6

Dekoratoren Dekoratoren sind Funktionen, die Funktionen als Argument nehmen und eine Funktion als Wert liefern @classmethod ist nur syntaktischer Zucker MyDict könnten wir auch so implementieren: class MyDict(dict): def fromkeys(cls, keys, default = None): return cls((key, default) for key in keys) fromkeys = classmethod(fromkeys) 7 Geschachtelte Funktionen (Wdh.) def makeadd(x): def add(y): return x + y return add >>> plus3 = makeadd(3) >>> plus4 = makeadd(4) >>> plus3(4) 7 >>> plus4(4) 8 Man kann Funktionen innerhalb von Funktionen definieren Die eingebettete Funktion kann die (lokalen) Variablen der einbettenden Funktion lesen Die eingebettete Funktion kann per return zurückgegeben werden 8

Geschachtelte Funktionen (Wdh.) def makecounter(): counter = 0 def count(): counter += return counter return count >>> c = makecounter() >>> c() Traceback (most recent call last): File "<stdin>", line, in <module> File "<stdin>", line 4, in count UnboundLocalError: local variable 'counter' referenced before assignment Die eingebettete Funktion kann die (lokalen) Variablen der einbettenden nicht setzen! Python interpretiert die Anweisung counter += als Zuweisung an eine lokale Variable der Funktion count() 9 Geschachtelte Funktionen (Wdh.) def makecounter(): counter = [0] def count(): counter[0] += return counter[0] return count Veränderbare Datentypen wie Listen können aber modifiziert werden Warum? >>> c = makecounter() >>> c() >>> c() 2 20

Geschachtelte Funktionen (Wdh.) def makecounter(): counter = 0 def count(): nonlocal counter counter += return counter return count mit nonlocal kann man Variablen als nicht-lokal deklarieren >>> c = makecounter() >>> c() >>> c() 2 2 Dekoratoren Dekoratoren sind Funktionen, die Funktionen als Argument nehmen und eine Funktion als Wert liefern. Wir können uns eigene Dekoratoren definieren def log(fn): def wrap(*args): print(fn) return fn(*args) return wrap 22

Dekoratoren def log(fn): def wrap(*args): print(fn) return fn(*args) return wrap @log def fun(): return 7 @log def fun2(): print(fun()) >>> fun() <function fun at 0xb738686c> 7 >>> fun2() <function fun2 at 0xb7fdeec> <function fun at 0xb738686c> 7 23 Dekoratoren def log(fn): def wrap(*args): print(fn) print('args:', ', '.join(str(a) for a in args)) return fn(*args) return wrap @log def fun(x, y): return x + y >>> fun(,2) <function fun at 0xb7fd72c> Args:, 2 3 24

Dekoratoren mit Argumenten Dekoratoren können Argumente haben Streng genommen sind das keine Dekoratoren, sonder Funktionen, die Dekoratoren als Wert liefern def log(name): def deco(fn): def wrap(*args): print(name) print('args:', ', '.join([...])) return fn(*args) return wrap return deko 25 Klassen und Dekoratoren Wie Funktionen können auch Klassen innerhalb von Funktionen definiert und als Wert zurückgeliefert werden Das heißt: Wir können auch Dekoratoren für Klassen schreiben. Der Dekorator muss freilich eine Klasse liefern (keine Funktion) 26

Klassen und Dekoratoren def singleton(cls): instance = None def getinstance(): nonlocal instance if instance == None: instance = cls() return instance return getinstance >>> i = Test() >>> i2 = Test() >>> i.whoami() 307243676 >>> i2.whoami() 307243676 >>> i == i2 True @singleton class Test: def whoami(self): return id(self) 27