Mehr über Kennwortargumente in Python
Aufgrund einer Umstellung des Kurses im März 2020 kann diese Lektion noch Mängel bei Formulierungen aufweisen.
Beim aufrufbaren Objekt »(print)« sind beispielsweise ›sep‹ und ›end‹ reine Kennwortparameter, da sie auf »…« folgen. Das heißt, Werte für diese Parameter können nur mit der Kennwortschreibweise angegeben werden.
- Protokoll
help( print )
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
»end=« – Abschluß der Ausgabe
Normalerweise schließt jeder Aufruf von ›print‹ eine Zeile der Ausgabe ab.
- Protokoll
print( 2 ); print( 3 )
2
3
Durch ein mit »end=« gekennzeichnetes Argument kann dies verhindert werden.
- Protokoll
print( 2, end='' ); print( 3 )
23
Das end-Argument (das Argument mit dem Kennwort »end«) gibt die Zeichenfolge an, mit welcher die gesamte Ausgabe beendet werden soll.
Falls die leere Zeichenfolge als Wert des end-Arguments angegeben wird, so wird der Ausgabe gar nichts weiter nachgestellt.
Falls – wie bisher – kein end-Argument angegeben wird, so wird die Ausgabe mit einem Zeilenende beendet.
- Protokoll
print( 2, end=', ' ); print( 3 )
2, 3
Ein print-Aufruf ohne Argument gibt entsprechend nur ein Zeilenende aus.
- Protokoll
print( 2 ); print( 3 ); print(); print( 4 );
2
3
4
Der Fehlwert von »end« ist «'\n'» (Zeilenende).
- Protokoll
print( 2 )
2
print( 2, end='\n' )
2
Eine Abkürzung Wir hatten oben das Zeichen »2« ohne Zeilenende ausgegeben, indem wir »print( 2, end='' )« verwendet hatten. Dies läßt sich noch etwas abkürzen.
- Protokoll
print( end='2' ); print( 3 )
23
Die Angabe eines Kennwortarguments mit einem Gleichheitszeichen ist nicht mit einer Bindungsanweisung zu verwechseln, obwohl es auch beim Aufruf eines Objektes zu Bindungen kommen kann: Nämlich Bindungen von Argumentwerten an Parameternamen. Jedoch würde solch eine Bindung beim Aufruf »str( 2 )« auch ohne »object=« erfolgen.
- Protokoll
print( 2, 2, sep=' ', end='\n' )
2 2
Übungsfragen ⃖
Bei der Beantwortung der folgenden Übungsfragen soll in der Antwort jedes ausgegebene Zeichen einzeln genannt werden.
? Übungsfrage ⃖
Welche Ausgabe erzeugt die Ausführung der folgenden Anweisung?
- Anweisung
print( '', end='' )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die Ausführung der folgenden beiden Anweisungen?
- Anweisung
print( ', ', end='' ); print( ',' )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die Ausführung der folgenden beiden Anweisungen?
- Anweisung
print( end='123' ); print( ',' )
? Übungsfrage ⃖
Welche Ausgabe erzeugt die folgende Anweisung?
- Anweisung
print( 'Det', 'ina', end='tum', sep='erm' )
Übungsaufgaben
/ Übungsaufgabe
Geben Sie mit einem Aufruf von ›print‹ die Werte der beiden Zeichenfolgenliterale »'a'« und »'b'« aus, so daß diese direkt hintereinander stehen. Hierbei soll das erste Argument das Zeichenfolgenliteral »'a'« sein, das zweite Argument soll das Zeichenfolgenliteral »'b'« sein.
/ Übungsaufgabe
Geben Sie mit einem Aufruf von ›print‹ den Buchstaben »a« aus.
Geben Sie mit einem weiteren Aufruf von ›print‹ den Buchstaben »b« und ein Zeilenende aus.
(Der Buchstabe »b« sollte hierbei also direkt hinter dem Buchstaben »a« erscheinen.)
»flush=« – Sofortige Erledigung der Ausgabe ⃗
Durch »flush=True« wird sichergestellt, daß die Ausgabe nicht erst zwischengespeichert und später ausgegeben, sondern sofort ausgegeben wird.
Nach Ausgabe eines Zeilenendes und vor Ausführung von eines Aufrufs von »input« wird immer ausgegeben.
Das folgende Beispiel zeigt jedoch, daß das »a« ohne »flush=True« erst zum Ende des Skripts (nach fünf Sekunden) ausgegeben wird, obwohl der print-Aufruf vor dem sleep-Aufruf ausgeführt wird.
- Protokoll
from time import sleep; print( 'a', end='' ); sleep( 5 )
- (fünf Sekunden Pause)
a
Bei Verwendung von »flush=True« erscheint die Ausgabe sofort.
- Protokoll
from time import sleep; print( 'a', end='', flush=True ); sleep( 5 )
a
- (fünf Sekunden Pause)