Intro Skript-Sprache Nich compiliert, sondern "interpretiert" Informatik I Einführung in Python, Basics Vergleich mit C++ "Glue"-Sprache (Filter-Skripte, Prototyping, …) Erfinder: Guido von Rossum Entstehung: 1987 Web-Seite: www.python.org Newsgroup: comp.lang.python Sehr aktive Weiterentwicklung (PEPs): G. Zachmann "Python Enhancement Proposal" Clausthal University, Germany [email protected] http://www.python.org/peps/ Wohldefinierte Prozedur unter Einbeziehung der Community Aussprache: wie "Monty Python" G. Zachmann Vergleich mit C++ Informatik 1 - WS 05/06 Einführung in Python 1 2 Einführung in Python 1 4 Programming Languages History Annahme: alle Informatik-I-Höhrer höhren auch "Programmieren" Gegenüberstellung von Syntax und Features G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 3 G. Zachmann Informatik 1 - WS 05/06 Warum Python? Hello World Relativ moderne Sprache Leicht erlernbar: wenig Keywords, klare Konzepte Muß jeder "echte" Programmierer einmal geschrieben haben! "Life's better without braces" (Bruce Eckel) Features: dynamisch typisierte Sprache (C++ ist statisch typisiert) the ACM "Hello World" project: Höhere Datenstrukturen (Listen, Dictionaries, …) http://www2.latech.edu/~acm/HelloWorld.shtml Introspektion Für erfahrene Programmierer: Lambda-Kalkül http://www.gnu.org/fun/jokes/helloworld.html VHLL (very high-level language) Erweiterbarkeit: A propos "Real Programmers": http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?Real+Programmers+Don't+Us Python kann in C++ eingebettet werden e+Pascal C++ kann von Python aus aufgerufen werden G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 5 G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 6 1 Interaktive Python-Shell Python IDE's: IDLE und eric python IDLE: Editor, Console, im Terminal aufrufen und Debugger Kommandozeilen-History Ist bei der Default- Kommandozeilen-Editor Python-Inst. Dabei Mehrzeilige Konstrukte mit Leerzeile abschließen Beispiel: Eric: Sehr schöne Features Brauchen wir nicht (erst sinnvoll bei sehr großen Projekten) Installation sehr aufwendig G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 7 G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 Python-Skripte Woraus besteht ein Programm? Skript = Text-File mit gesetztem exec-Permission-Bit Abstrakt: Zeichenfolge entsprechend einer formalen Grammatik Beispiel: Formale Grammatik besteht aus Regeln folgender Art: statement-list : <Leerzeile> statement <NL> statement-list 8 ["Rek.-Ende"] [Newline] Spätere Vorlesung zu formalen Grammatiken Pfad kann evtl. anders lauten; bekommt man mittels which python G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 9 G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 10 Kommentare Werden ignoriert Startet mit #, bis zum Ende der Zeile Langer Kommentarblock """ Blubber bla bla bla bla. """ x = 10 # Bedeutung der Variable # Kommentarzeile Zum Vergleich in C++ Kann überall sort stehen, wo ein Statement stehen kann const int Ntries; // the rest of the line … // … is treated like a comment Funktioniert nicht so allgemein in der interaktiven Pyhton-Shell In C/C++ const int Ntries; /* this is a multiline comment: Everything is treated like a comment. Comments can’t be nested. The comment is closed with a */ G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 11 G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 12 2 Identifier Keywords Wie in C++ und praktisch jeder anderen Sprache Wörter mit spezieller Bedeutung Anderes Wort für Name (Variablename, Funktionsname) Sind reserviert, kann man nicht als Namen verwenden Zeichenkette and assert break class continue def Zugelassen: alphanumerische Zeichen und Underscore (_) Erstes Zeichen darf nicht Ziffer sein - blub und _bla sind ok - 2pi nicht ok Kein Limit auf Länge Informatik 1 - WS 05/06 Keywords in Python for from global if import in is lambda not or pass print raise return try while yield keyword asm auto bool break case catch char class const const_cast continue default delete do double dynamic_cast In C++ : Case-sensitiv G. Zachmann del elif else except exec finally Einführung in Python 1 13 Eingebaute (built-in) einfache Typen G. Zachmann else enum explicit extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_ return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while Informatik 1 - WS 05/06 Einführung in Python 1 14 Literale Im großen ganzen wie in C++: int : Integers (ganze Zahlen) Zahlen bool : Wahrheitswerte 123 0123 0x123 3.14 3E1 "" "123" "name" "a \"string\"" """a string ... spanning two lines""" True False None () (1,) (1,2,3) [] [1,2,3] type(x) float : Floating-Point-Zahlen (floats) ("reelle Zahlen") str : Strings (im Gegensatz zu C++ echter Datentyp) Höhere Datenstrukturen Liste, Komplexe Zahlen, Dictionary: später Set, Module, File, … Unterschiede zu C++: int kann beliebig groß werden (Python schaltet intern autom. um) int's (decimal, octal, hex) floats string (first = null string) prints: a "string" string over several lines is built-in bool's "Zeiger-Wert" / 0-Obj. (NULL in C++) Tupel Liste Typen kann man vergleichen und zuweisen float = double (ex. kein single precision float) Höhere Datenstrukturen (str, Sequenzen, complex, dict, etc.) fest eingebaut, nicht über Header-Files / Libraries G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 15 G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 16 Einführung in Python 1 18 Variablen Ähnliche Funktion wie in Mathematik, speichert Wert Objekte im Speicher haben immer einen Typ Variable = Paar von Name und "Zeiger" (Binding) >>> a = 1 In Python, im Unterschied zu C++: >>> type(a) <type 'int'> Variablenname hat keinen Typ!! Wert der Variable sehr wohl! >>> a = "Hello" Ist nur "Zeiger" auf Wert im Speicher, kann beliebig oft geändert >>> type(a) <type 'string'> werden Braucht nicht deklariert werden! >>> type(1.0) Muß natürlich vor Verwendung erzeugt worden sein <type 'float'> Erzeugung / Initialisierung: pi = 3.1415926 # erzeugt Variable seconds_per_day = 60*60*24 # dito seconds_per_day = 86400 # ändert Wert G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 17 G. Zachmann Informatik 1 - WS 05/06 3 Style Guidelines für Variablen Operatoren und Ausdrücke Wie in C++ und jeder anderen Sprache Ausdruck (expression) = mathematischer oder logischer Term "Kleine" Variablen: Beispiele: Laufvariablen, Variablen mit sehr kurzer Lebensdauer import math sin(x)*sin(2*x) # arithm. expression "to " + "be" # string expr. 2 < 1 # logic expression (x > "aaa") and (x < "zzz") # dito 1-3 Buchstaben i,j,k,… für int's a,b,c,x,y,z … für float's "Große" Variablen: Ausdruck setzt sich zusammen aus: Längere Lebensdauer, größere Bedeutung Literalen (Konstanten), Variablen, Funktionen Labeling names! ("Sprechende Namen") Operatoren mein_alter, meinAlter, determinante, … Klammern Übliche Regeln G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 19 Operatoren und Ausdrücke Arithm. Operator -i +w a*b a/b i%2 a+b a-b x**y Assignment op. x □= y Bsp.: x -= y x /= y x &= y G. Zachmann In Python im Gegensatz zu C++: Definiert für alle numerischen Typen less than greater than less or equal greater or equal equals not equal Einführung in Python 1 not x (not x) and y ((not x) and y) or (z and w)) in C++ ! && || 21 G. Zachmann unary not logical and logical or Informatik 1 - WS 05/06 Ganzzahlarithmetik In C++: Wertebereich ++j; j++; --j; j--; Equivalent to j=j+1; k=j; j=j-1; k=j; 22 unary not logical and logical or Increment- / Decrement-Operatoren = = = = Einführung in Python 1 Boolean Operators not and or Boolean Operators Informatik 1 - WS 05/06 k k k k 20 in Python In Python im Gegensatz zu C++: Definiert für alle Typen! x = x - y x = x / y x = x & y Self-increment and decrement Einführung in Python 1 Beispiele Relational Operators < > <= >= == != equivalent x = x □ (y) Informatik 1 - WS 05/06 Boole'sche Operatoren Meaning unary + and mult., div., modulo binary + and power Bit-wise Operators ~ i bitwise Complement i & j bitwise AND i | j bitwise OR i ^ j bitwise XOR G. Zachmann Integers können beliebig lang werden k=j; j=j+1; k=j; j=j-1; Overflow: Kein Überlauf in Python! Division: Gibt es in Python nicht! ("das ist auch gut so") wie in C++: 3/2 1, 3.0/2 1.5 Problem mit Increment- / Decrement-Operatoren: import sys print sys.maxint 2147483647 print sys.maxint * 2 4294967294 Ändert sich wahrschl demnächst (Operator //) Nebeneffekt → schlechte Wartbarkeit; und Reihenfolge der Auswertung der Operanden nicht festgelegt → versch Ergebnisse Division und Modulo: (x/y)*y + x%y == x Beispiel: Tabelle oben Beispiel 2 & 3: while ( source[j] ) dest[i++] = source[j++] ; G. Zachmann Informatik 1 - WS 05/06 i = 2; j = (i++) * (i--); j = ? Einführung in Python 1 23 G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 24 4 Float-Arithmetik (praktisch identisch zu C++) Implementiert IEEE 754-1985 Standard Überlauf ("overflow"): Zahl wird zu groß / zu klein Beispiel: max.float * 2 Resultat = +∞ bzw. -∞ Underflow: Zahlen liegen zu dicht an der 0 Resultat = +0.0 bzw. -0.0 NaN (Not a Number) (in C++): Rechnungen, wo kein sinnvoller Wert rauskommt Bsp.: 1/0 , ∞*0 , sqrt(-1.0) In Python: Fehlermeldung G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 25 5