Python ist ein plattformunabhängige Skriptsprache in der man schnell, einfach und leicht programmieren kann. Auch auf Webservern wird es benutzt.
dir(str)
import sys print sys.__doc__
import sys help(sys.modules)
Es existiert mit dem skript pydocgui (bzw. auf Windows der Eintrag „Module Docs“ im Startmenu) auch eine Ausgabe in HTML
Nach dem Aufruf des Interpreters übersetzt der den Quelltext in maschinenunabhängigen Bytecode (abgespeichert hat er die Dateiendung .pyc) der dann zur Laufzeit von der Python virtual machine (PVM) ausgeführt wird.
Python2 ist veraltet. Es wird weiterhin verfügbar sein, Programme sollten jedoch explizit auf den python2-Interpreter verweisen wenn sie nicht mit 3 laufen.
Der Standard-Python-Interpreterpfad (Aufruf von python --version
) sollte nun auf Version 3 landen.
Ablauf bei Debian/Ubuntu 1):
sudo update-alternatives --remove python /usr/bin/python2.7 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 sudo apt install python3-pip sudo apt remove python-pip #pip für version2 # ggf. sind lokal Versionen installiert, siehe whereis pip oder which -a pip # "ln -s /usr/bin/pip /home/$USER/.local/bin/pip" sudo ln -s /usr/bin/pip3 /usr/bin/pip
import sys print sys.__doc__
import sys help(sys)
Eine Ausgabe ist übrigens auch in html möglich.
Vorraussetzung: Ein Python-Interpreter ist auf dem System und im Suchpfad erreichbar.
raw_input()
hinzufügen das auf einen Tastendruck wartet. Bricht allerdings das Programm vorher unerwartet mit einem Fehler ab, wird diese letzte Anweisung nicht mehr ausgeführt.
#!/usr/bin/env python # -*- coding: utf-8 -*
die erste Zeile kann auch spezifischer sein, ist dann allerdings nicht mehr so gut portabel!
#!/usr/bin/python2.6
Kommentare:
Programmstruktur
Variablen sind immer Zeiger auf unveränderliche Objekte, Ausnahmen sind u.a. Listen und Dictionaries wo Objekte an Ort und Stelle verändert werden. Nicht mehr benutzte Objekte werden freigegeben (garbage collection). Der Typ einer Variable kann mit type ausgegeben werden:
type(Variable)
Es gibt 3 Kategorien von Typen (und Operationen):
Dabei unterscheiden sich
Objekttyp | (Erzeugungs-) Beispiele |
---|---|
Zahlen 2)3) | |
Normale Ganzzahl 4) | 1234, -48, 0 |
Lange Ganzzahl 5) | 99999999999999999L |
Fließkommazahl 6) | 1.23, 3.14e-10, 5E123, 5.0e+234 |
Oktale und Hexadezimale Literale 7) | 0167, 0xf3f, 0XFF |
Komplexe Zahlen 8)) | 3+4j, 3.0+4.0j, 3J |
Strings (=Zeichenketten) | |
Leerer String | a = '' |
einfache und doppelte Anführungszeichen: kennzeichnen Text, beide Varianten sind gleichwertig 9) | „text“ oder 'text' |
dreifache Anführungszeichen: beliebig lange Texte | print """ erste Zeile zweite Zeile """
|
Escape-sequenzen | print "Anführungszeichen \" sind toll " spezielle Zeichen wie \n für Zeilenumbruch oder \t für Tabulator gelten außerdem |
rohe strings (python escaped automatisch) | pfad = r'C:\ordner\datei.txt' |
Unicode strings 10) | u'deutsche Umlaute in unicode: öäü' |
Listen - eine Sammlung beliebiger Objektarten | |
Zugriff auf einzelne Elemente | print liste[0] |
Listen reagieren bei Operatoren ähnlich wie Strings | |
Länge bestimmen | len([1, 2, 3]) ergibt drei |
Verkettung | [1, 2, 3] * [4, 5, 6] ergibt [1, 2, 3, 4, 5, 6] |
Enthalten? | 3 in [1, 2, 3] ergibt „True“ |
Iteration | for x in [1, 2, 3]: print x |
Dictionaries (=Wörterbücher weil Schlüssel-Wert-paar) bzw. assoziative Arrays | |
Beschreibung/Hinweise | Wörterbücher sind Container, sie speichern nicht die Objekte an sich, sondern die Pointer auf die Werte. Schlüssel in einem dictionary können ein beliebiges Objekt sein, solange es immutable und hashbar ist 11). Somit sind beispielsweise Listen nicht als Schlüssel möglich. Schlüssel sind oft string, aber auch integer,tupel oder unicode werden benutzt. Außerdem müssen Schlüssel auch nicht homogen sein, hier können mehrere Datentypen vermischt werden!)) |
Initialisieren | exampledict = {} |
Wertzuweisung (Schlüssel) | exampledict = {1: "eins", 2: "zwei", 3: "drei"} |
Anzahl Einträge bestimmen | |
Alle Werte anzeigen | exampledict Ausgabe: {1: 'eins', 2: 'zwei'} |
Zugriff auf einzelne Elemente | exampledict[1] wenn der Schlüssel als string definiert worden wäre: exampledict["1"] |
einzelne Elemente (hier Schlüssel 4 mit Wert „vier“) hinzufügen | exampledict[4] = "vier" |
einzelne Elemente (hier Schlüssel 3) löschen | exampledict.del(3) |
alle Elemente/das komplettes dictionary löschen | exampledict.clear() |
Werte verändern 12) | |
Schlüsselnamen verändern | Geht nur über löschen/neu setzen weil die Schlüsselnamen selbst unveränderbar sind: oldval = exampledict[4] del exampledict[4] exampledict[4] = "Vier" |
Iteration | for exampledict in [1, 2]: print exampledict |
Wörterbücher - nicht existierende Einträge abfangen | |
→ Methode 1: EAFP (Easier to Ask Forgiveness than Permission) - Wert-Abfrage mit abfangen der Exception | try: print exampledict[4] except KeyError: print "not found" |
→ Methode 2: LBYL (Look Before You Leap) - Schauen ob Schlüssel existiert und dann Wertabfrage oder Meldung ohne Wertabfrage | if 4 in exampledict: print exampledict[4] else: print "not found" Alternativ wäre die if-Zeile auch so möglich: exampledict.has_key(4) hier wird dann False zurückgegeben folglich in in else verzweigt. |
→ Methode 3: get-Methode von dict mit oder ohne default-Wert | ergebnis = exampledict.get(4, "not found") print ergebnis |
Alias zu einem dictionary erzeugen | exampledict2 = exampledict
|
Shallow-copy 13) von einem dictionary erzeugen | exampledict2 = exampledict.copy() |
Eingenständige (rekursive) Kopie von einem dictionary erzeugen | exampledict2 = copy.deepcopy(exampledict) |
Ausgabesortierung | |
Tupel | |
Dateien | |
Mengen | |
explizite Typumwandlung:
Ausdrucksoperatoren:
print 2 ** 100
print 'hello ' + 'world'
if x == 1: print "x ist gleich 1."
if x == 1: print "x ist gleich 1." elif x == 0 print "x ist gleich 0." else: print "x ist weder 1 noch 0."
auswahl = "Hilfe" print {"keineHilfe": 0, "Hilfe": 1, "Sonstiges": 9}[auswahl]
has_key()
oder get()
:auswahl = {"keineHilfe": 0, "Hilfe": 1, "egal": 3} print auswahl.get("Antwort nicht enthalten", "Sonstiges")
Folgende zwei Schleifenkonstrukte sind die wichtigsten, es gibt noch allerdings noch andere Funktionen wie map, reduce, filter, den Elementtest mit in, List Comprehensions usw.
a = 0 while a < 10: a = a + 1 # Kurzschreibweise: a += 1 if a == 5: print "die 5 gebe ich nicht aus!" continue print a else: print "Schleife normal beendet"
a = 0 while a < 10: a = a + 1 # Kurzschreibweise: a += 1 if a == 5: print "die 5 gebe ich nicht aus!" break print a else: print "Schleife normal beendet"
for a in ["erster " "zweiter " "dritter"]: print a
beim Aufruf:
funktionsname(wert1, wert2)
funktionsname(argument1=wert1, argument2=wert2)
in diesem Fall gleichbedeutend:
funktionsname(argument2=wert2, argument1=wert1)
in der Funktionsdeklaration:
def funktion(wert)
def funktion(name=wert)
def funktion(*tupel)
def funktion(**dict)
Eine Sonderform ist der lamba-Ausdruck, er wird oft als inline-Funktion benutzt. Damit können Funktionen an Stellen aufgerufen werden, wo sonst kein „def“ erlaubt wäre.
Anstatt (Ein- und Ausgabe der interaktiven Shell):
>>> def function(a, b, c): return a + b + c ... >>> function(1, 2, 3) 6
geht genauso:
>>> rechne = lambda a, b, c: a + b + c >>> rechne <function <lambda> at 0x87096f4> >>> rechne(1, 2, 3) 6
Import von Modulen
import modulename
reload (modulename)
Als Vorbereitung muss python-dev
bzw- python3-dev
installiert werden, andernfalls kommt diese Fehlermeldung:
fatal error: Python.h: Datei oder Verzeichnis nicht gefunden
Siehe auch: Installing Python Modules (Legacy version)
Hier ist lediglich ein kopieren in das „site-packages“ Unterverzeichnis nötig:
Siehe auch: Mod_python Manual und Introducing mod_python.
Zuerst muss einmal mod_python
<Directory /var/www/pythondir> AddHandler mod_python .py </Directory>
Natürlich kann man mod_python auch global aktivieren, dann lässt man die Einschränkung auf ein einziges Verzeichnis eben weg.
Andere Optionen (z.B. PythonHandler Dateiname (ohne .py); PythonDebug On usw.) sind auch möglich.
print ' dieses Anführungszeichen " ist Teil des strings'
str(u'unicodetext)bzw. von normal nach unicode:
unicode ('normal')
__hash__
definiert haben. Das kann mit hash(Variable)überprüft werden.