\section {Einführung}
\label {einfuehrung}

  %\subsection {Geschichte}
  \subsection {Hintergrund}

    Python wurde ursprünglich allein von Guido van Rossum am Centrum
    voor Wiskunde en Informatica in den Niederlanden entwickelt. Zuvor
    arbeitete Van Rossum mehrere Jahre an ABC, einer Programmiersprache,
    die hauptsächlich für Lehrzwecke entwickelt wurde. Noch heute sind
    Ähnlichkeiten zwischen Python und ABC erkennbar, etwa die
    syntaktische Signifikanz von Whitespace und die Möglichkeit der
    interaktiven Nutzung. Van Rossum hat jedoch auch ganz gezielt Fehler
    bzw.~ Beschränkungen von ABC vermieden.\footnote {\cite [Python is
    Born]{pymaking}} So konnte Python im Gegensatz zu ABC von Anfang an
    mit Dateien umgehen und war aufgrund des Modulkonzepts schon immer
    sehr einfach erweiterbar.

    Obwohl Python zu Beginn mit dem bescheidenen Ziel "`to bridge the
    gap between the shell and C"'\footnote {\cite[Python's Original
    Design Goals]{pydesign}} entwickelt wurde, zeigte sich mit der Zeit
    die Vielseitigkeit der Sprache und immer größere Programme
    entstanden in den unterschiedlichsten Anwendungsdomänen.\footnote
    {Siehe \citep{pysuccess} für eine unvollständige Liste von "`Success
    Stories"'.}

    Seit dem Jahr 2001 findet die Arbeit an Python unter dem Dach der
    \emph {Python Software Foundation}\footnote {Online unter \url
    {http://python.org/psf/}.} statt. Sie bildet den rechtlichen Rahmen,
    in dessen Namen Konferenzen veranstaltet sowie Spenden verwaltet
    werden und sie hält die Eigentumsrechte an Python.  Gleichwohl ist
    Python weiterhin für jedermann verfügbar. Pythons Lizenz\footnote
    {\cite{pylicense}} erlaubt das freie Kopieren, Verändern und
    Verteilen von verändertem Code. Sie ist von der Open Source
    Initiative zertifiziert und GPL-kompatibel,\footnote
    {\citep[GPL-Compatible Free Software Licenses]{fsf-licenses}}
    enthält allerdings keine Copyleft-Klausel, also einen Zwang,
    Veränderungen oder Ergänzungen ebenfalls samt Sourcecode
    auszuliefern. Das macht Python vor allem unter Anhängern freier
    Software, aber auch in kommerziellen Umgebungen ausgesprochen
    beliebt.


  \subsection {Philosophie}

    Python ist eine objektorientierte, interaktive, interpretierte
    Programmiersprache für Windows, Unix, Macintosh und eine Reihe
    weiterer Betriebssysteme. Es gilt das Smalltalk-Motto "`Everything
    is an object."' Das heißt, auch Funktionen, Klassen und Module sind
    Objekte. Die Definition dessen, was ein Objekt ist, ist in Python
    allerdings relativ locker: ein Objekt muss keine Attribute oder
    Methoden haben. Was alle Objekte eint, ist die Fähigkeit, einer
    Variablen zugewiesen, oder als Parameter einer Funktion übergeben zu
    werden.\footnote {Nach \citep[Kapitel 2.4.2.]{dive}  -- diese vage
    Definition soll vorerst genügen, das Thema wird in Abschnitt~\ref
    {typ-obj} ausführlich erörtert.} Funktionen höherer Ordnung und
    Metaprogrammierung (auch Introspection oder Reflection genannt) sind
    möglich und in vielen Anwendungen anzutreffen.
   
    Variablen haben in Python keinen Typ. Sie sind bloß \emph {Namen}
    für Objekte. Sie brauchen deswegen nicht deklariert zu werden und
    ihnen können auch nacheinander Objekte verschiedener Typen
    zugewiesen werden. Ein Objekt dagegen ist während seiner gesamten
    Lebensdauer an einen bestimmten Typ gebunden. Allerdings kann ein
    bereits instanziertes Objekt zur Laufzeit neue Methoden und
    Attribute erhalten oder alte verlieren.
    
    Die Konsequenz daraus ist das sogenannte \emph {Duck Typing}: "`If
    it looks like a duck and quacks like a duck, it must be a
    duck."'\footnote {\cite [Appendix D (Glossary)]{pytut}} Wer also
    einem Objekt eine Nachricht schickt, braucht sich nicht um seinen
    Typ kümmern, denn dieser würde keine verlässlichen Informationen
    über die verstandenen Nachrichten liefern. Stattdessen muss der
    Programmierer im Zweifel sicherstellen, dass der Empfänger die
    Nachricht auch versteht. Solche Zweifel sind aber nicht die Regel.
    Der Aufwand, in diesen Fällen von Hand zu prüfen ist im Allgemeinen
    geringer, als den Typ aller Objekte ausdrücklich zu deklarieren.
    "`It's easier to ask for forgiveness than to seek permission"' ist
    ein weiteres häufig gebrauchtes Idiom in Python. Das bedeutet, der
    Programmierer sendet einem Objekt einfach eine Nachricht und fängt
    die passende Exception für den Fall, dass das Objekt diese Nachricht
    nicht versteht. Selbst Syntaxfehler können auf diese Weise
    abgefangen werden. Wem dieser Stil nicht zusagt, der kann
    stattdessen auch sehr einfach die Namen aller Attribute eines
    gegebenen Objekts erfragen und vor dem Zugriff überprüfen, ob das
    Gewünschte darunter ist.

  \subsection {Syntax}

    Pythons Syntax ist denkbar einfach gehalten. Mit den Worten des
    Autors Guido van Rossum: "`Python code looks like executable pseudo
    code."'\footnote {\cite[Python's Strenghts] {glue}} Ein Grund dafür
    ist die syntaktische Bedeutung von Whitespace, also Zeilenumbrüchen,
    Tabulatoren und Leerzeichen.  Zeilenumbrüche markieren das Ende
    einer Anweisung, sofern sie nicht mit einem Backslash maskiert sind.
    Mit Tabulatoren oder Leerzeichen gleichmäßig eingerückte Zeilen
    kennzeichnen zusammenhängende Codeblöcke, wobei Leerzeichen
    vorzuziehen sind.\footnote {\cite[Code lay-out]{pep8}} Groß- und
    Kleinschreibung wird unterschieden. Alle Schlüsselwörter\footnote
    {\cite[Kapitel  2.3.1]{pyref}} werden in Kleinbuchstaben geschrieben.
    Ein kleines Beispiel findet sich in Listing~\vref {lst:syntax}
    (Schlüsselwörter hier und im Folgenden in \textbf {Fettdruck}).
  
    \lstinputlisting[float=tb,caption=Syntaxbeispiel,label=lst:syntax]
    {lst/syntax.py}
  
    Der Pythoninterpreter kann nicht nur gespeicherte Skripte ausführen,
    sondern auch interaktiv benutzt werden. Er stellt dem Benutzer eine
    Art Shell zur Verfügung, die das Ergebnis jedes abgeschlossenen
    Ausdrucks auf dem Bildschirm ausgibt. Wir greifen das vorige
    Beispiel in Listing~\vref {lst:interactive} noch einmal auf.
    
    \lstinputlisting[float=tb,caption=Interaktive
    Pythonshell,label=lst:interactive]{lst/interactive.py}
   
    Das Schlüsselwort \lstinline $def$ (Zeile~\ref {interactive:def})
    leitet eine Funktionsdefinition ein. Die drei Punkte am Beginn der
    nächsten Zeile druckt der Interpreter zur Erinnerung daran, dass die
    Funktionsdefinition noch nicht abgeschlossen ist. Er wird erst mit
    Zeile~\ref {interactive:enddef} beendet, weil dort keine um vier
    Leerschritte eingerückte Zeile steht. In diesem Fall wird das
    Ergebnis des Ausdrucks nicht ausgegeben. Das liegt daran, dass die
    Deklaration einer Funktion (eventuell im Gegensatz zu ihrem Aufruf)
    immer den Rückgabewert \lstinline $None$ hat. Der Interpreter druckt
    diesen Wert im interaktiven Modus aber nicht. In den folgenden
    Beispielen werden sowohl reine Codelistings als auch interaktive
    Sitzungen dargestellt, je nachdem, wie es gerade nützlich erscheint.
   
    Klassendefinitionen sehen ähnlich aus wie Definitionen von
    Funktionen.  Statt des Schlüsselwortes \lstinline $def$ wird hier
    \lstinline $class$ verwendet. In Klammern hinter dem Namen stehen
    die Oberklassen. Mehr dazu in Abschnitt~\ref {typ-obj}. Eine
    vollständige, formale Darstellung der Syntax ist in \citep {pyref}
    zu finden.

