Informatik I Einführung in Python, Basics Vergleich mit C++

Werbung
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
Herunterladen