Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
python [2014/11/16 18:39] root [Arbeiten mit Dateien] |
python [2018/04/25 13:50] (aktuell) root [Sequentielle Operatoren] |
||
---|---|---|---|
Zeile 46: | Zeile 46: | ||
* Mutable -> Veränderliche Datentypen -> Datentypen die nach der Deklaration noch geändert werden können | * Mutable -> Veränderliche Datentypen -> Datentypen die nach der Deklaration noch geändert werden können | ||
- | * Immutable -> Datentypen die nach der Deklaration nicht mehr verändert werden können -> entspricht const in C | + | * Immutable -> Datentypen die nach der Deklaration nicht mehr verändert werden können |
- | * Alle Datentypen | + | * wobei hier zu beachten ist, dass veränderbar sich nicht auf die Variable bezieht, sondern auf den Speicherbereich auf welchen sie verweis |
+ | * das bedeute wird ein immutable geändert verändert sich der Speicherbereich auf den er verweist und enthält den neuen Wert | ||
+ | * Variable in Python die auf ein immuteable verweisen sind "Copy on Write" | ||
+ | |||
+ | |||
+ | **Praktisch: | ||
+ | |||
+ | * int sind immutable | ||
+ | * wird in einer Varibalen vom Typ int 4 gespeichert und per "+= 1" die Variable um 1 erhöht, wir ein neuer Speicherbereich mit dem Wert 5 erstellt | ||
+ | |||
+ | < | ||
+ | #a ist vom Typ int und wird der Wert 4 zugewiesen | ||
+ | a=int(4) | ||
+ | #b ist vom Typ int, aber leer | ||
+ | b=int() | ||
+ | #b wird a zugewiesen - a und b haben den gleichen Wert | ||
+ | b=a | ||
+ | #Abfrage des Speicherplatzes auf den b verweist | ||
+ | id(b) | ||
+ | 152711856 | ||
+ | #Abfrage des Speicherplatzes auf den a verweist | ||
+ | id(a) | ||
+ | 152711856 | ||
+ | #Erhöhen von b um 1 | ||
+ | b+=1 | ||
+ | #Abfrage des Speicherplatzes auf den b verweist | ||
+ | id(b) | ||
+ | 152711844 | ||
+ | #Abfrage de Speicherplatzes von a | ||
+ | id(a) | ||
+ | 152711856 | ||
+ | </ | ||
+ | |||
+ | * A und B verweisen nach dem ändern von B auf verschiedene Speicherbereiche | ||
Zeile 103: | Zeile 137: | ||
* s -> das serielle Objekt aus dem das größte Objekt/ | * s -> das serielle Objekt aus dem das größte Objekt/ | ||
</ | </ | ||
- | |s[x]|Ermöglicht den Zugriff auf das xte Element innerhalb eines seriellen Objektes \\ \\ \\ Syntax: s[x] \\ \\ < | + | |sum(s)|Summiert die Werte im seriellen Objekt (also deren Werte, nicht deren Anzahl| |
+ | |s[x]|Auch bekannt als Sub-Operator. \\ Ermöglicht den Zugriff auf das xte Element innerhalb eines seriellen Objektes \\ \\ \\ Syntax: s[x] \\ \\ < | ||
* s -> das serielle Objekt | * s -> das serielle Objekt | ||
- | * x -> das Element auf welches man zugreifen möchte/ | + | * x -> das Element auf welches man zugreifen möchte/ |
+ | Man kann innerhalb des Suboperators auch Operationen ausführen: | ||
+ | < | ||
+ | s[x-1] | ||
+ | </ | ||
+ | In dem Beispiel würde der Wert aus x - 1 berechnet und das Ergebnis als Index verwendet. | ||
</ | </ | ||
|s[x: | |s[x: | ||
Zeile 158: | Zeile 198: | ||
* in Python Standard-Mapping: | * in Python Standard-Mapping: | ||
* Speichert Key-Value-Pairs aka Wert-Paare | * Speichert Key-Value-Pairs aka Wert-Paare | ||
- | ===== Sprachkonstrukte | + | ====== Sprachkonstrukte |
- | ==== Methoden | + | ===== Funktionen ===== |
+ | |||
+ | * Entsprechen weitgehenst | ||
+ | * sind eigenständige Objekte | ||
+ | |||
+ | ===== Methoden | ||
Syntax: | Syntax: | ||
Zeile 165: | Zeile 210: | ||
def Funktionsname (Parameter1, | def Funktionsname (Parameter1, | ||
Funktionscode | Funktionscode | ||
+ | return // | ||
</ | </ | ||
Zeile 175: | Zeile 221: | ||
* Funktionsname: | * Funktionsname: | ||
* Parameterx: Parameter die an die Funktion übergeben werden; Als bennannter Parameter in beliebiger Reihenfolge -> Parametername=Wert, | * Parameterx: Parameter die an die Funktion übergeben werden; Als bennannter Parameter in beliebiger Reihenfolge -> Parametername=Wert, | ||
+ | * **Achtung**: | ||
+ | * return: Optional, Gibt beim herausspringen den Wert/ | ||
- | === Optionale Parameter | + | |
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Optionale Parameter | ||
* In der Literatur/ | * In der Literatur/ | ||
Zeile 191: | Zeile 244: | ||
- | === Benannte Parameter | + | ==== Benannte Parameter |
* Ermöglicht das angeben von Parametern in beliebiger Reihenfolge | * Ermöglicht das angeben von Parametern in beliebiger Reihenfolge | ||
Zeile 206: | Zeile 259: | ||
* über den Parameternamen können die Paraemter direkt angesprochen werden | * über den Parameternamen können die Paraemter direkt angesprochen werden | ||
- | ==== Klassen | + | |
+ | |||
+ | ==== Beliebige Anzahl Parameter | ||
+ | |||
+ | * Bei Defeinition der Methode wird der letzte Parameter *// | ||
+ | * dieser Parameter kann dann beliebig viele Argumente aufnehmen | ||
+ | * das geht nur beim letzten Parameter in der Parameterliste | ||
+ | * die einzelnen Werte in dem Parameter werden in einem Tuppel gespeichert | ||
+ | * der Abruf der einzlnen Werte kann zum Beispiel durch eine for-each-Schleife (for x in y) erfolgen | ||
+ | |||
+ | Syntax: | ||
+ | |||
+ | < | ||
+ | def // | ||
+ | | ||
+ | |||
+ | // | ||
+ | </ | ||
+ | |||
+ | * //Parameter 3// hat ein vorangestellten * und nimmt alle Werte auf die überzählig sind (mehr sind als es Parameter gibt) | ||
+ | * in diesem Beispiel sind das die Werte 1-5 | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | ===== Klassen | ||
* Klassen sollten (wenn sie nicht von einer anderen Klasse erben) von Object erben | * Klassen sollten (wenn sie nicht von einer anderen Klasse erben) von Object erben | ||
Zeile 212: | Zeile 289: | ||
- | === Klassenvariablen | + | ==== Klassenvariablen |
* Variablen die die global über alle Objekte der Klasse existieren | * Variablen die die global über alle Objekte der Klasse existieren | ||
Zeile 228: | Zeile 305: | ||
- | === Objektvariablen | + | ==== Objektvariablen |
* Variablen die innerhalb des Objektes global verfügbar sind | * Variablen die innerhalb des Objektes global verfügbar sind | ||
Zeile 245: | Zeile 322: | ||
- | === Überladen | + | ==== Überladen |
* Überladen von Methoden ist in Python nicht vorgesehen | * Überladen von Methoden ist in Python nicht vorgesehen | ||
Zeile 252: | Zeile 329: | ||
- | === Überschreiben | + | ==== Überschreiben |
* Überschreiben von Methoden geht | * Überschreiben von Methoden geht | ||
Zeile 258: | Zeile 335: | ||
- | === Private Variablen/ | + | ==== Private Variablen/ |
* Gibt es in Python nicht | * Gibt es in Python nicht | ||
Zeile 266: | Zeile 343: | ||
Syntax: def _Methodenname(self) | Syntax: def _Methodenname(self) | ||
- | === Statische Variablen/ | + | ==== Statische Variablen/ |
**This section is not tested and based on assumptions: | **This section is not tested and based on assumptions: | ||
- | * Werden per __Methodenname | + | * Werden per %%_%%_Methodenname |
* sind vorhanden ohne das eine Instanz der Klasse geschaffen wurde | * sind vorhanden ohne das eine Instanz der Klasse geschaffen wurde | ||
- | === Spezialmethoden | + | ==== Spezialmethoden |
* Es gibt einige Methoden die nur durch den Compiler aufgerufen werden sollen | * Es gibt einige Methoden die nur durch den Compiler aufgerufen werden sollen | ||
- | * Diese werden mit __Methode__ | + | * Diese werden mit %%_%%_Methode%%_%%_ |
- | Syntax: | + | Syntax: |
===== Funktionen ===== | ===== Funktionen ===== | ||
Zeile 315: | Zeile 392: | ||
* //Modus// -> Für was die Datei geöffnet erden soll. \\ r -> Lesen, w -> Schreiben, a -> Daten an das Ende anfügen, r+ -> Lesen und Schreiben, w+ -> Schreiben und lesen - vorher die Datei leeren, a+ Anfügen und Datei zum lesen öffnen. \\ Die Optionen gibt es auch mit vorangestelltem b - in dem Fall werden die Dateien binär geöffnet | * //Modus// -> Für was die Datei geöffnet erden soll. \\ r -> Lesen, w -> Schreiben, a -> Daten an das Ende anfügen, r+ -> Lesen und Schreiben, w+ -> Schreiben und lesen - vorher die Datei leeren, a+ Anfügen und Datei zum lesen öffnen. \\ Die Optionen gibt es auch mit vorangestelltem b - in dem Fall werden die Dateien binär geöffnet | ||
</ | </ | ||
+ | |type (Objekt)|Gibt den Typ (die Klasse) eines Objektes zurück| | ||
+ | |dir(Objekt)|Gibt alle Methoden eines Objektes zurück| | ||
====== HowTos ====== | ====== HowTos ====== | ||
Zeile 320: | Zeile 399: | ||
===== Arbeiten mit Dateien ===== | ===== Arbeiten mit Dateien ===== | ||
+ | Eine Datei in Python wird durch ein Dateiobjekt repräsentiert. \\ | ||
+ | Beim öffnen einer Datei durch die eingebaute Methode open() wird eben jenes Dateiobjekt zurückgeliefert. \\ | ||
+ | Alle Operationen, | ||
+ | Viele Operationen beziehen sich nicht auf die ganze Datei, sondern nur eine bestimmte Anzhal Bytes oder Zeilen. | ||
+ | Dabei wird ab der Stelle die Aktion durchgeführt an der sich der Zeiger innerhalb der Date befindet - es gibt also immer eine bestimmte Stelle an der man innerhalb der Datei steht. \\ Diese verschiebt sich, zum Beispiel nach einem readline an den Beginn der nächsten Zeile. \\ Per tell() kann man sich die aktuelle Position geben lassen und per seek eine Position setzen. \\ \\ Schreiboperationen werden nicht immer sofort auf die Platte geschrieben, | ||
+ | Dateiobjekte können ein Iterable mit den Zeilen der Datei zur Verfügung stelen, damit wird es u.a. möglich eine Datei folgendermaßen Zeile für Zeile zu durchlaufen: | ||
+ | < | ||
+ | fobj=open("/ | ||
+ | for line in fobj: | ||
+ | print line | ||
+ | fobj.close() | ||
+ | </ | ||
+ | \\ | ||
+ | Per Default schreibt Python Daten hintereinanderweg in die Datei, auch wenn sie aus verschiedenen Schreiboperationen stammen, es wird standardmäßig kein Zeilenumbruch gemacht: | ||
+ | < | ||
+ | fobj=open("/ | ||
+ | fobj.write(" | ||
+ | fobj.write(" | ||
+ | </ | ||
+ | Beide Strings stehen in der Date hintereinander: | ||
+ | Man kann in die Strings Steuerzeichen einfügen, wie " | ||
+ | < | ||
+ | < | ||
+ | fobj=open("/ | ||
+ | fobj.write(" | ||
+ | fobj.write(" | ||
+ | </ | ||
+ | In diesem Fall stehen Hallo und Mensch auf verschiedenen Zeilen in der Datei (untereinander). \\ | ||
+ | Um nach dem lesen aus der Datei die Steuerzeichen wieder zu entfernen hat die String-Klasse die Methode " | ||
+ | \\ \\ | ||
^Methode ^Funktion ^ | ^Methode ^Funktion ^ | ||
|open(// | |open(// | ||
Zeile 353: | Zeile 462: | ||
|readline(// | |readline(// | ||
|readlines()|Ließt alle Zeilen einer Datei aus und gibt sie als Liste von Strings zurück| | |readlines()|Ließt alle Zeilen einer Datei aus und gibt sie als Liste von Strings zurück| | ||
+ | |tell|Gibt die derzeitige Position in der Datei an (Integer)| | ||
+ | |seek|Spingt an eine bestimmte Psoition der Datei| | ||
+ | |||
+ | ===== Benutzen von anderen Zeichensätzen ===== | ||
+ | |||
+ | Standardmäßig akzeptiert Python nur Zeichen des ASCII-Zeichensatzes im Code (alle anderen Zeichen müssen per Escape-Sequenz angegeben werden). \\ \\ | ||
+ | < | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | Mit dem Kommentar # | ||
+ | |||
+ | Hinweis: Der verwendete Editor muss ebenfalls in UTF8 kodieren können (siehe [[vim]] | ||
====== Troubleshooting ====== | ====== Troubleshooting ====== | ||
Zeile 377: | Zeile 499: | ||
^Name ^Typ ^Beschreibung ^Quelle ^ | ^Name ^Typ ^Beschreibung ^Quelle ^ | ||
|Python Das umfassende Handbuch|Buch/ | |Python Das umfassende Handbuch|Buch/ | ||
+ | |||
+ | |||
+ | ====== Notizen ====== | ||
+ | |||
+ | ===== CGI ===== | ||
+ | |||
+ | ==== CGI FieldStorage ==== | ||
+ | |||
+ | * Dropdowns haben immer einen Wert -> ist ein Dropdown im Formular ist die Länge des CGI FieldStorages immer mindestens 1 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ |