Size: 11929
Comment:
|
Size: 171
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
SatelliteImageAnalysis = Programming Python = == Introduction == |
|
Line 4: | Line 9: |
= Warum Python? = * Frei (Open Source) und auf allen Plattformen verfügbar * Dynamische Very High Level Language (VHLL) * Mächtig mit vielen Anwendungsbereichen * Leicht erlernbar und kurze Entwicklungszeiten * Leicht erweiterbar durch Routinen in C/C++ oder Fortran * Module für wissenschaftliche Anwendungen (wie IDL und MATLAB) * Gut dokumentiert und dokumentierbar = Die Programmierumgebung = Der normale Pythoninterpreter wird mit dem Befehl '''python''' aufgerufen. {{{#!python python #Python 2.4.4 (#2, Apr 5 2007, 20:11:18) [GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> }}} Ein Python Programm startet man entweder durch Aufruf des Interpreters und des Programmnamens {{{#!python python hello.py Hallo Welt }}} Oder als ausführbares Programm {{{#!python ./hello.py Hallo Welt }}} Dazu muss das Programm zuvor mit einer Magic-Line '''#!/usr/bin/python''' versehen werden und die Rechte mit '''chmod +x hello.py''' ensprechend gesetzt werden. Der Quelltext des Programms mit dem Dateinamen '''hello.py''' sieht wie folgt aus. Die Endung '''.py''' ist Konvention für Python Programme. {{{#!python #!/usr/bin/python print "Hallo Welt" }}} Das Programm kann mit einem Editor (z.B. '''nedit''' oder '''xemacs''') erzeugt und verändert werden. == IPython == http://ipython.scipy.org/ IPython (Aufruf '''ipython''') bietet eine stark erweiterte Interaktive Funktionalität des Interpreters (in Anlehnung an IDL und MATLAB). Nützlich sind die Magic-Kommandos, Betriebssystem-Aliase und die einfache Hilfe-Funktion. {{{#!python ipython ... In [1]: run hello.py Hallo Welt }}} === Standardeditor === In der Konfigurationsdatei kann der Editor geändert werden: {{{#!python nedit .ipython/ipythonrc }}} {{{#!python # Which editor to use with the %edit command. If you leave this at 0, IPython # will honor your EDITOR environment variable. Since this editor is invoked on # the fly by ipython and is meant for editing small code snippets, you may # want to use a small, lightweight editor here. # For Emacs users, setting up your Emacs server properly as described in the # manual is a good idea. An alternative is to use jed, a very light editor # with much of the feel of Emacs (though not as powerful for heavy-duty work). editor nedit }}} = Was ist ein Programm? = == Interpreter versus Compiler == Quellcode -> Interpreter -> Ergebnis Quellcode -> Compiler -> Objectcode -> Ausführung -> Ergebnis == Programmablauf == Eingabe, Ausgabe, Algorithmus == Debugging/Fehlersuche == Syntaxfehler: Formale Struktur des Programms Laufzeitfehler: Fehler und Ausnahmen, die während des Ablaufs auftreten Semantische Fehler: Formal korrektes Programm, welches zu falschem Ergebnis führt Debugging ist Detektivarbeit und eine eigene Wissenschaft für sich. Durch Experimente können Fehler gefunden werden. Es muss eine Idee (Hypothese) über die Fehlerquelle vorhanden sein, die durch den Programmablauf getestet wird. Verschiende Werkzeuge können das Debugging erleichern. Eine vielbenutzte einfache Methode ist die Print Anweisung um Variablen zu überwachen. = Variablen, Ausdrücke, Anweisungen, Operatoren, Kommentare = == Werte und Typen == Werte (z.B. 1) sind verschiedenen Typen zugeordnet {{{#!python In [32]: type(1) Out[32]: <type 'int'> In [33]: type(1.0) Out[33]: <type 'float'> In [34]: type('Hallo') Out[34]: <type 'str'> }}} == Variablen == Variablen sind Namen, zu denen ein Wert gehört {{{#!python In [51]: a=1 In [52]: s='Zeichenkette' In [53]: a Out[53]: 1 In [54]: s Out[54]: 'Zeichenkette' In [55]: type(a) Out[55]: <type 'int'> In [56]: type(s) Out[56]: <type 'str'> }}} Über den Zustand der Variablen kann man sich mit dem IPython Kommando %who bzw. %whos informieren. {{{#!python In [57]: %whos Variable Type Data/Info ---------------------------- a int 1 s str Zeichenkette }}} == Erlaubte Namen == Variablennamen sollten sinnvoll vergeben werden. Die Länge ist unbegrenzt und es können Buchstaben und Zahlen verwendet werden. Am Anfang darf jedoch keine Zahl stehen. Als Sonderzeichen ist der Unterstrich erlaubt. Illegale Namen führen zu Syntaxfehlern: {{{#!python In [59]: 5a=1 ------------------------------------------------------------ File "<ipython console>", line 1 5a=1 ^ SyntaxError: invalid syntax }}} Python Keywords dürfen nicht als Variablennamen verwendet werden. Reservierte Keywords sind: {{{#!python and else import raise assert except in return break exec is try class finally lambda while continue for not yield def from or del global pass elif if print }}} == Anweisung (Statements) == Eine Anweisung ist ein Befehl, den der Python Interpreter ausführen kann, z.B. eine Print-Anweisung oder Variablen-Zuweisung {{{#!python In [60]: s='Welt' In [61]: print 'Hallo '+s Hallo Welt }}} == Operaturen == Operatoren sind spezielle Symbole für Rechenanweisungen * + Plus * - Minus * * Multiplikation * / Division * ** Exp. Das Plus Zeichen kann im Zusammenhang mit Strings als Operator verwendet werden, um diese zu verbinden. {{{#!python In [63]: a='Aller Anfang ' In [64]: b='ist schwer' In [65]: a+b Out[65]: 'Aller Anfang ist schwer' }}} == Ausdrücke (Expressions) == Ein Ausdruck ist eine Kombination von Variablen, Werten und Operatoren. Der Interpreter evaluiert den Ausruck. {{{#!python In [62]: 1+1 Out[62]: 2 }}} == Kommentare == Kommentare helfen ein Programm zu verstehen. Sie werden durch ein Doppelkreuz (#) eingeleitet = Funktionen = Eine Funktion ist eine Reihe von Anweisungen um eine Rechenoperation durchzuführen. Eine Funktion wird durch einen Namen spezifiziert (erlaubte Namen wie bei Variablen). Nach der Definition kann die Funktion durch den Namen aufgerufen werden. {{{#!python In [9]: type(1) Out[9]: <type 'int'> }}} Dies ist ein Beispiel für eine eingebaute Funktion (Übersicht http://docs.python.org/lib/built-in-funcs.html). Der Name der Funktion ist '''type'''. In Klammern wird der Funktion ein Argument (1) übergeben. Die Funktion liefert einen Rückgabewert (int) zurück. == Typumwandlungsfunktionen == {{{#!python In [12]: int(2.3) Out[12]: 2 In [13]: float(2) Out[13]: 2.0 In [14]: 1/2 Out[14]: 0 In [15]: 1/float(2) Out[15]: 0.5 In [16]: str(1) Out[16]: '1' }}} == Hinzufügen neuer Funktionen == Das Hinzufügen neuer Funktionen geschieht durch eine Deklaration (Definition). Dabei ist die Python Symtax der Einrückungen wichtig. Die Einrückungen definieren den Gültigkeitsbereich der Funktion. Quellcode '''einfache_funktion.py''' {{{#!python def summe(a,b): c=a+b return c a=1 b=2 print summe(a,b) }}} {{{#!python In [17]: %edit einfache_funktion.py Editing... done. Executing edited code... 3 In [18]: run einfache_funktion.py 3 In [19]: summe(4,5) Out[19]: 9 }}} Das Beispiel enthält nicht nur eine Funktion sondern auch ein Hauptprogramm, welches die Funktion aufruft. Nach dem Editieren wird dieser Teil sofort ausgeführt. == Dokumentation == Gute Dokumentation ist wichtig! Funktionen können durch '''docstrings''' ergänzt werden {{{#!python def summe(a,b): """Berechne die Summe aus a und b""" c=a+b return c a=1 b=2 print summe(a,b) }}} Ruft man nun die Hilfefunktion auf, dann bekommt man eine Auskunft über das Interface: {{{#!python In [27]: help(summe) Help on function summe in module __main__: summe(a, b) Berechne die Summe aus a und b }}} = Module = Module sind Sammlungen von Funktionen und erweitern den sehr minimalen Sprachumfang von Python um neue Funktionen. Eine Liste der verfügbaren Module erhält man durch die Hilfe-Funktion: {{{#!python In [3]: help() help> modules ArgImagePlugin WalImageFile ftplib pygtk ArrayPrinter WmfImagePlugin gc pylab .. UserString fpformat pyexpat zonetab2pot }}} Um ein Modul zu nutzen muss es zunächst '''importiert''' werden: {{{#!python import scipy }}} Jetzt können die Funktionen des Moduls '''scipy''' genutzt werden. Mit '''scipy''' erhält Python mathematische Fähigkeiten ähnlich wie IDL und MATLAB. {{{#!python In [9]: a=scipy.array([1,2,3,4,5]) In [10]: b=scipy.array([1,2,3,4,5]) In [11]: a+b Out[11]: array([ 2, 4, 6, 8, 10]) }}} Es gibt verschiedene Möglichkeiten Module zu importieren. Davon hängt ab, in welchem '''Namensraum''' das Modul erreichbar ist {{{#!python import scipy as sp }}} {{{#!python In [9]: a=sp.array([1,2,3,4,5]) In [10]: b=sp.array([1,2,3,4,5]) In [11]: a+b Out[11]: array([ 2, 4, 6, 8, 10]) }}} Durch die Möglichkeit das Modul in den Wurzelnamensraum zu importieren {{{#!python from scipy import * }}} spart man sich einige Schreibarbeit {{{#!python In [9]: a=array([1,2,3,4,5]) In [10]: b=array([1,2,3,4,5]) In [11]: a+b Out[11]: array([ 2, 4, 6, 8, 10]) }}} jedoch besteht die Möglichkeit von Konflikten falls noch weitere Module mit Funktionen gleichen Namens importiert werden. === scipy === http://www.scipy.org/ Das Modul '''scipy''' beinhaltet eine Reihe von Submodulen für eine Vielzahl von wissenschaftlichen Anwendungen {{{#!python import scipy help(scipy) ndimage --- n-dimensional image package [*] stats --- Statistical Functions [*] io --- Data input and output [*] lib --- Python wrappers to external libraries [*] linalg --- Linear algebra routines [*] linsolve.umfpack --- Interface to the UMFPACK library. [*] signal --- Signal Processing Tools [*] misc --- Various utilities that don't have another home. interpolate --- Interpolation Tools [*] lib.lapack --- Wrappers to LAPACK library [*] cluster --- Vector Quantization / Kmeans [*] linsolve --- Linear Solvers [*] fftpack --- Discrete Fourier Transform algorithms [*] sparse --- Sparse matrix [*] maxentropy --- Routines for fitting maximum entropy models [*] integrate --- Integration routines [*] optimize --- Optimization Tools [*] special --- Special Functions [*] lib.blas --- Wrappers to BLAS library [*] [*] - using a package requires explicit import (see pkgload) }}} Scipy baut auf dem Modul Numpy auf, welches optimierte Matrixoperationen bereitstellt. Der Umstieg von IDL und MATLAB auf scipy/numpy fällt mit diesen Kurzanleitungen besonders leicht: [http://37mm.no/mpy/idl-numpy.html NumPy for IDL users] [http://www.scipy.org/NumPy_for_Matlab_Users NumPy for Matlab users] === pylab === http://matplotlib.sourceforge.net/ Pylab (matplotlib) reichert Python um die Fähigkeiten zur graphischen Ausgabe an, die im grossen Umfang mit Matlab kompatibel ist. Um ein gutes interaktives Arbeiten mit diesem Modul zu ermöglichen, muss der Interpreter mit besonderer Option gestartet werden: '''ipython -pylab''' === GDAL === [http://www.gdal.org/ GDAL - Geospatial Data Abstraction Library] = Weiterführende Information = http://www.greenteapress.com/thinkpython/ |
* Why Python? * The Python Environment * Documentation |
Programming Python
Introduction
SiaProgrammingPythonIntroduction
- Why Python?
- The Python Environment
- Documentation