Einrückungen
Funktionsköpfe und Aufrufe
Verzweigungen
Wiederholungsstrukturen
Strukturebenen in Programmen, Funktionen/Prozeduren und Klassen werden durch Einrückungen gekennzeichnet. Davor steht in der Regel ein Doppelpunkt, also am Ende des Funktionskopfes, des if - Kopfes, ...
Eine Besonderheit bei Funktionsköpfen ist die Definition mit Standardwerten. Ist im Klammerausdruck ein Standardwert vorgegeben, braucht beim Aufruf nicht der Parameter übergeben werden. Wird beim Aufruf auch der Bezeichner des Parameters angegeben, ist nicht einmal mehr das Einhalten der Reihenfolge der Parameter notwendig. Der Funktionskopf des Beispiels
def Rechteck(breite = 100, hoehe = 60): print "Rechteck mit Breite" +str(breite)+" und Hoehe "+str(hoehe)
ermöglicht die nachfolgenden Aufrufe
Rechteck() Rechteck(80) Rechteck(hoehe=50, breite=70)
mit den Ausgaben
Rechteck mit Breite100 und Hoehe 60 Rechteck mit Breite80 und Hoehe 60 Rechteck mit Breite70 und Hoehe 50
Das letzte Beispiel zeigt, dass man das eher nicht machen sollte.
Wie zu erwarten gibt es if und else, die um elif ergänzt werden.
Selbstverständlich gibt es eine Wiederholungsstruktur, bei der vor dem Einstieg die (potenzielle) Anzahl der Schritte bekannt ist, das for. Das Problem bei den 2-er-Python Versionen ist, dass mit Schleifenvariable in Sequence-Type gearbeitet werden muss, was dazu führt dass bei einfachen Zählschleifen erst eine Liste der möglichen Werte der Variablen erstellt wird, bevor in die Schleife eingestiegen wird. Für die Bestimmung der Werte verwende man die Funktion range
>>> print range(50) ## nur Python 2! [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
Man stelle sich die Ausgabe beim Beispiel vor!
Dies ist zunächst einmal durch die Einführung von xrange verbessert worden, das die Elemente der Liste erst beim Zugriff anlegt. Das ganze Konzept ist inzwischen bei der Python-Version 3 geändert worden. [s.u.]
while ist ebenfalls möglich, so dass man das vorige Beispiel auch so bearbeiten kann.
Beachten Sie, dass Rekursion zwar zulässig ist, Python aber keine Endrekursion erkennt und daher entsprechend der Aufruftiefe den stack belastet.
Zunächst einmal ist der Aufruf von print jetzt auch mit Klammer für die Parameter auszuführen, so dass es
>>> print(range(50))heißen dürfte. (was allerdings noch nicht das ergibt, was man will -> s.u.)
Die wesentliche Änderung aber ist, dass
>>> range(50) range(0, 50)nicht im Sinne einer Bestimmung der Liste ausgeführt wird, sondern dass ein Iteratorobjekt erzeugt wird. In der Hilfe heißt es dazu:
In many ways the object returned by [range()] behaves as if it is a list, but in fact it isn't. It is an object which returns the successive items of the desired sequence when you iterate over it, but it doesn't really make the list, thus saving space.
We say such an object is iterable, that is, suitable as a target for functions and constructs that expect something from which they can obtain successive items until the supply is exhausted. We have seen that the [for] statement is such an iterator. The function [list()] is another; ...
Also liefert erst die ausdrückliche Aufforderung, davon eine Liste zu bilden, diese auch zurück:
>>> list(range(5)) [0, 1, 2, 3, 4]
Also wird man bei print entsprechend vorgehen:
>>> print(list(range(5))) [0, 1, 2, 3, 4]
Zurück zur Homepage.
© claus albowski