Benutzer-Werkzeuge

Webseiten-Werkzeuge


python

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
python [2014/11/16 18:03]
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 sind Objekte+      * 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" -> in dem Moment in dem auf sie geschrieben wird, wird ein neuer Speicherbereich referenziert mit dem neuen Wert auf den sie ab dann verweisen 
 + 
 + 
 +**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 
 + 
 +<code> 
 +#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 
 +</code> 
 + 
 +  * 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/Wert/Element ermittelt werden soll   * s -> das serielle Objekt aus dem das größte Objekt/Wert/Element ermittelt werden soll
 </WRAP> | </WRAP> |
-|s[x]|Ermöglicht den Zugriff auf das xte Element innerhalb eines seriellen Objektes \\ \\ \\ Syntax: s[x] \\ \\ <WRAP>+|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] \\ \\ <WRAP>
   * s -> das serielle Objekt    * s -> das serielle Objekt 
-  * x -> das Element auf welches man zugreifen möchte/dessen Inhalt man haben will - **Achtung:** Die Zählung beginnt bei 0+  * x -> das Element auf welches man zugreifen möchte/dessen Inhalt man haben will - **Achtung:** Die Zählung beginnt bei 0 \\ \\ 
 +Man kann innerhalb des Suboperators auch Operationen ausführen: 
 +<code> 
 +s[x-1] 
 +</code> 
 +In dem Beispiel würde der Wert aus x - 1 berechnet und das Ergebnis als Index verwendet.
 </WRAP> | </WRAP> |
 |s[x:y]|Zugriff auf auf Bereich von Elementen innerhalb eines seriellen Objektes \\ \\ \\ Syntax: s[x:y] \\ \\ <WRAP> |s[x:y]|Zugriff auf auf Bereich von Elementen innerhalb eines seriellen Objektes \\ \\ \\ Syntax: s[x:y] \\ \\ <WRAP>
Zeile 158: Zeile 198:
   * in Python Standard-Mapping: Dictionary   * in Python Standard-Mapping: Dictionary
   * Speichert Key-Value-Pairs aka Wert-Paare   * Speichert Key-Value-Pairs aka Wert-Paare
-===== Sprachkonstrukte  ===== +====== Sprachkonstrukte  ====== 
-==== Methoden  ====+===== Funktionen ===== 
 + 
 +  * Entsprechen weitgehenst Methoden (siehe unten) 
 +  * sind eigenständige Objekte 
 + 
 +===== Methoden  =====
  
 Syntax:  Syntax: 
Zeile 165: Zeile 210:
 def Funktionsname (Parameter1,Parameter2): def Funktionsname (Parameter1,Parameter2):
     Funktionscode     Funktionscode
 +    return //Variable//
 </code> </code>
  
Zeile 175: Zeile 221:
   * Funktionsname: Name der Funktion   * Funktionsname: Name der Funktion
   * Parameterx: Parameter die an die Funktion übergeben werden; Als bennannter Parameter in beliebiger Reihenfolge -> Parametername=Wert, Parameter2=Wert2, oder als unbenannte Parameter in Reihenfolge -> Parameter1, Parameter2 usw.    * Parameterx: Parameter die an die Funktion übergeben werden; Als bennannter Parameter in beliebiger Reihenfolge -> Parametername=Wert, Parameter2=Wert2, oder als unbenannte Parameter in Reihenfolge -> Parameter1, Parameter2 usw. 
 +      * **Achtung**: Alle Variablen werden als Referenz übergeben - bei mutable (veränderlichen Datentypen) wird bei Veränderungen innerhalb der Methode auch die Variable die übergeben wurde mit geändert -> soll das verhindert werden sollte innerhalb der Methode eine Kopie gemacht werden
 +  * return: Optional, Gibt beim herausspringen den Wert/Variable hinter return zurück.
  
  
-=== Optionale Parameter  ===+ 
 + 
 + 
 + 
 + 
 +==== Optionale Parameter  ====
  
   * In der Literatur/Dokumentation als Parameter1,Parameter1[,Parameter3, Parameter4] dargestellt -> Parameter1 und 2 sind dabei anzugeben, 3 und 4 sind optional   * In der Literatur/Dokumentation als Parameter1,Parameter1[,Parameter3, Parameter4] dargestellt -> Parameter1 und 2 sind dabei anzugeben, 3 und 4 sind optional
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 *//Parametername// angeben 
 +      * 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: 
 + 
 +<code> 
 +def //methodenname// (//Parameter1//,//Parameter2//,*//Parameter3//): 
 +     Code 
 + 
 +//methodenname//(//Wert1//, //Wert2//, //Wert3//, //Wert4//, //Wert5//
 +</code> 
 + 
 +  * //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/Methoden  ===+==== Private Variablen/Methoden  ====
  
   * Gibt es in Python nicht   * Gibt es in Python nicht
Zeile 266: Zeile 343:
 Syntax: def _Methodenname(self) Syntax: def _Methodenname(self)
  
-=== Statische Variablen/Methoden  ===+==== Statische Variablen/Methoden  ====
  
 **This section is not tested and based on assumptions:** **This section is not tested and based on assumptions:**
  
-  * Werden per __Methodenname deklariert+  * Werden per %%_%%_Methodenname deklariert
   * 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__ deklariert+  * Diese werden mit %%_%%_Methode%%_%%_ deklariert
  
-Syntax:  def __init__()+Syntax:  def %%_%%_init%%_%%_()
 ===== 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 
 </WRAP> | </WRAP> |
 +|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, wie lesen und schreiben sind Methoden dieses Dateiobjektes. \\ \\
 +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, sondern landen eventuell erst im Schreibpuffer des Betriebsyystems -> die Date enthält dann noch nicht den geänderten Inhalt. Per flush() oder close() wird die Datei auf die Festplatte 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:
 +<code>
 +fobj=open("/tmp/somefile","r")
 +for line in fobj:
 +  print line
 +fobj.close()
 +</code>
 +\\ 
 +Per Default schreibt Python Daten hintereinanderweg in die Datei, auch wenn sie aus verschiedenen Schreiboperationen stammen, es wird standardmäßig kein Zeilenumbruch gemacht:
 +<code>
 +fobj=open("/tmp/somefile","r")
 +fobj.write("Hallo ")
 +fobj.write("Mensch")
 +</code>
 +Beide Strings stehen in der Date hintereinander: Hallo Mensch, ohne Zeilenumbruch. \\
 +Man kann in die Strings Steuerzeichen einfügen, wie "\n" -> es gibt je nach Platform verschiedene Steuerzeichen für Newline. \\
 +<code>
 +<code>
 +fobj=open("/tmp/somefile","r")
 +fobj.write("Hallo \n")
 +fobj.write("Mensch")
 +</code>
 +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 "strip()" die eine Kopie des Strings zurückgibt, ohne Zeilenumbruch am Ende (Hinweis: die Methode entfernt weitere Steuerzeichen).
 +\\ \\
 ^Methode ^Funktion ^ ^Methode ^Funktion ^
 |open(//Dateipfad//,//Modus//)|Öffnet eine Datei. \\ Rückgabewert ist ein Dateiobjekt \\ \\ Modi: <WRAP> |open(//Dateipfad//,//Modus//)|Öffnet eine Datei. \\ Rückgabewert ist ein Dateiobjekt \\ \\ Modi: <WRAP>
Zeile 341: Zeile 450:
 </code> </code>
 </WRAP> | </WRAP> |
-|read(//Size//)|Ließt Daten aus einer Datei, liefert einen String mit den gelesenen Daten zurück \\ \\ +|read(//Size//)| <WRAP> 
 +Ließt Daten aus einer Datei, liefert einen String mit den gelesenen Daten zurück \\ \\ 
 Size ist die zu lesende Anzahl Bytes. Der Parameter ist optional, wird er nicht angegeben wird bis zum Ende der Datei (EOF) gelesen. Size ist die zu lesende Anzahl Bytes. Der Parameter ist optional, wird er nicht angegeben wird bis zum Ende der Datei (EOF) gelesen.
 \\ \\ \\ \\
Zeile 349: Zeile 459:
 fobj -> das Dateiobejkt welches von open zurückgegeben wurde \\ fobj -> das Dateiobejkt welches von open zurückgegeben wurde \\
 Size -> Optionaler Parameter der die Länge in Byte angibt die gelesen werden soll  Size -> Optionaler Parameter der die Länge in Byte angibt die gelesen werden soll 
-|+</WRAP>| 
 +|readline(//Size//)|Ließt eine Zeile aus der Datei - optionaler Parameter Länge in Bytes die zu lesen sind \\ \\ Eine Zeile definiert sich bis ein Newline (Steuerzeichen welches das Ende einer Zeile markiert, es gibt verschiedene Standards die systemabhängig sind) kommt. \\ Der Zeiger steht danach hinter dem letzten gelesenen Zeichen/am ersten der nächsten Zeile. Ein erneutes Aufrufen von readline liefert also die nächste Zeile. \\ \\ Beispiel: a=fobj.readline() | 
 +|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). \\ \\ 
 +<code> 
 +#coding=utf-8 
 +</code> 
 + 
 +Mit dem Kommentar #coding=Charset in der ersten oder zweiten Zeile einer Datei setzt den Zeichensatz auf den angegebenenen.
  
 +Hinweis: Der verwendete Editor muss ebenfalls in UTF8 kodieren können (siehe [[vim]]
 ====== Troubleshooting ====== ====== Troubleshooting ======
  
Zeile 374: Zeile 499:
 ^Name ^Typ ^Beschreibung ^Quelle ^ ^Name ^Typ ^Beschreibung ^Quelle ^
 |Python Das umfassende Handbuch|Buch/Kurs|Openbook von Galileo |http://openbook.galileocomputing.de/python/| |Python Das umfassende Handbuch|Buch/Kurs|Openbook von Galileo |http://openbook.galileocomputing.de/python/|
 +
 +
 +====== Notizen ======
 +
 +===== CGI =====
 +
 +==== CGI FieldStorage ====
 +
 +  * Dropdowns haben immer einen Wert -> ist ein Dropdown im Formular ist die Länge des CGI FieldStorages immer mindestens 1
 +
 +
 +
 +
 +
 +
python.1416157438.txt.gz · Zuletzt geändert: 2014/12/04 10:24 (Externe Bearbeitung)