Die Funktion »print« in Python
Nach der Eingabe eines Ausdrucks in die Konsole wird eine Textdarstellung des Wertes jenes Ausdrucks ausgegeben (wenn kein Fehler auftritt und der Wert nicht ›None‹ ist). Tatsächlich gibt es in Python verschiedene Arten von Textdarstellungen, darunter die repr- und die str-Darstellung. Bei der bisher verwendeten Form der Darstellung handelte es sich um die repr-Darstellung, welche beispielsweise Apostrophe zu einer Zeichenfolge hinzufügt.
- Eingabe eines Ausdrucks und Ausgabe der repr-Darstellung seines Wertes
'abc'
'abc'
Durch Auswertung eines print-Aufrufes können wir die str-Darstellung eines Wertes ausgeben. Sie fügt beispielsweise zu Zeichenfolgen keine Apostrophe hinzu. Dadurch ist der Typ des Wertes weniger gut erkennbar, aber die Ausgabe kann so genauer kontrolliert werden und ist auch manchmal übersichtlicher.
- Auswertung
print( 'abc' )
abc
Die str-Darstellung einer Zeichenfolge ist im wesentlichen die Zeichenfolge selber. Daher gibt »print« eine Zeichenfolge praktisch unverändert aus.
- Ausgabe der Ausgabedarstellung des Objekts eines Ausdrucks
Ausdruck ----------> Objekt --------------.-----> repr-Ausgabedarstellung
Auswertung Ausgabe | z.B.: 'abc'
|
'-----> str-Ausgabedarstellung
z.B.: abc
Die str-Darstellung ist die „normale“ Darstellung eines Objektes, wie sie etwa auch zur Ausgabe für Benutzer eines Programms verwendet wird.
Die repr-Darstellung zeigt Objekte manchmal eher so, wie diese in den Quelltext geschrieben werden (bei str-Objekten) und richtet sich daher eher an Programmierer.
Semantik
Änderung
Die Auswertung eines Aufrufs von »print« hat bewirkt die Ausgabe der str-Textdarstellung des Argumentwertes.
(Eine Ausgabe verändert die Schreibfläche, daher stellt sie eine Änderung dar.)
Wert
Der Wert eines Aufrufs von »print« ist stets das Objekt ›None‹.
Der Typ des Wertes eines Aufrufs von »print« ist daher stets die Klasse »NoneType« (»NoneType« kann aber normalerweise nicht als Ausdruck verwendet werden!).
Die Ausgabe von »None«
Der Wert »None« wird von der Konsole normalerweise nicht ausgegeben. Mit »print« kann dieser Wert jedoch ausgegeben werden (als Textdarstellung »None«).
- Konsolenprotokoll
None
- (keine Ausgabe)
- Konsolenprotokoll
print( None )
None
Die Ausgabe von ›True‹
Ganz verschiedene Werte können die gleiche Ausgabedarstellung haben.
- Protokoll
print( 'True' )
True
- Protokoll
print( True )
True
Der Operator »==« zeigt aber, daß die Werte nicht gleich sind.
- Protokoll
print( 'True' == True )
False
Die Grundstrich »_« der Konsole ⃗
Da der Wert eines print-Aufrufs stets das Objekt ›None‹ ist, wird durch einen print-Aufruf die Bindung des Grundstrichs nicht verändert.
- Konsolenprotokoll
10
10
print( _ + 1 )
11
print( _ + 2 )
12
Die Reihenfolge der Auswertung von Operanden
Operanden werden von links nach rechts ausgewertet. Die Funktion ›print‹ erlaubt es uns, dies deutlich vorzuführen.
- Konsolenprotokoll
print( 3 )or print( 4 )
3
4
- Zitat *
- 6.15 Evaluation order
- Python evaluates expressions from left to right.
- The Python Language Reference, Release 3.9.0a3
Die Ausgabe von Sonderzeichen
Die Ausgabe mancher Zeichen bewirkt besondere Aktionen des Ausgabesystems. Die Ausgabe von ›'\n'‹ bewirkt die Beendigung der Zeile.
- Protokoll
print( 'def\nghi' )
def
ghi
Lambda zitiert Ausdrücke, ohne sie auszuwerten
Bei der Zuweisung wird die rechte Seite stets ausgewertet :
- Protokoll
f = print( 1 )
1
Bei der Auswertung eines Lambda-Ausdrucks wird aber der Ausdruck hinter dem Doppelpunkt nicht ausgewertet, sondern lediglich im sich ergebenden Lambda-Objekt gespeichert.
- Protokoll
f = lambda: print( 1 )
(keine Ausgabe)
Erst beim Aufruf einer Lambda-Funktion wird der gespeicherte Ausdruck dann ausgewertet.
- Protokoll
f()
1
Man kann daher sagen, daß die Auswertung mit »lambda« verzögert werden kann.
Außerdem ist es auch möglich, den einmal gespeicherten Ausdruck mehrfach auswerten zu lassen.
- Protokoll
f()
1
f()
1
f()
1
Ersatzdarstellungen des Quelltextes °
Im Quelltext einer Zeichenfolge muß das Zeichen „Inverser Schrägstrich“ »\« (etwas vereinfacht gesagt) durch zwei inverse Schrägstriche dargestellt werden. Bei der Wert-Ausgabe in der Konsole sieht man dann auch wieder zwei inverse Schrägstriche, doch »print« zeigt die Zeichenfolge unverändert an.
- Ausgabe mit »print«
print( 'def\\ghi' )
def\ghi
- Ausgabe des Wertes einer Auswertungsanweisung in der Konsole
'def\\ghi'
'def\\ghi'
Nur die Ausgabe mit ›print‹ zeigt hier die tatsächliche Zeichenfolge »def\ghi« korrekt an!
Auch wenn die Schreibweisen »\n« und »\\« innerhalb von Zeichenfolgenliteralen zwei Zeichen sind, stehen sie jeweils für ein einziges Zeichen in der Zeichenfolge.
- Auswertung
len( '\n' )
1
- Auswertung
print( '\n' )
(Leerzeile)
- Auswertung
len( '\\' )
1
- Auswertung
print( '\\' )
\
»print« kann verwendet werden, um Zeichenfolgen mit inversen Schrägstrichen wörtlich zu sehen.
- Protokoll
from os import getcwd
getcwd()
'C:\\Users\\example\\AppData\\Local\\Programs\\Python\\Python39'
- Protokoll
print( getcwd() )
C:\Users\example\AppData\Local\Programs\Python\Python39
Kuriosität Wenn der inverse Schrägstrich keine spezielle Kombination (wie »\n« oder »\\«) einleitet, steht er für sich selbst.
- Auswertung
print( '\d' )
\d
Ausgabe des Ergebnisses einer Verkettung ⃗
Mit Hilfe des Operators »+« können auch Zeichenfolgen mit Apostrophen und Anführungszeichen aufgebaut werden.
Die sich ergebende Zeichenfolge kann aber erst mit »print« übersichtlich dargestellt werden.
- Auswertung mit »print«
print( 'x"x' + "o'o" )
x"xo'o
- Auswertung ohne »print«
'x"x' + "o'o"
'x"xo\'o'
Ausgabe mehrzeiliger Texte °
Erst durch die str-Darstellung, wie »print« sie verwendet, erscheinen mehrzeilige Text übersichtlich und wie beabsichtigt.
- Protokoll
from inspect import getdoc
getdoc( input )
'Read a string from standard input. The trailing newline is stripped.\n\nThe prompt string, if given, is printed to standard output without a\ntrailing newline before reading input.\n\nIf the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.\nOn *nix systems, readline is used if available.'
print( _ )
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.- Protokoll (Alternative Version ohne »_«)
from inspect import getdoc
getdoc( input )
'Read a string from standard input. The trailing newline is stripped.\n\nThe prompt string, if given, is printed to standard output without a\ntrailing newline before reading input.\n\nIf the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.\nOn *nix systems, readline is used if available.'
print( getdoc( input ))
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
lambda-Ausdrücke mit »print« °
Ein lambda-Ausdruck kann auch einen print-Aufruf enthalten.
- Protokoll
p = lambda: print( 38 )
p()
38
p()
38
Die von der Auswertung von »_()« bewirkte Änderung ist die Ausgabe von »38«, der erhaltene Wert ›None‹ wurde von der Konsole nicht ausgegeben. Da ›None‹ den Wert von »_()« nicht ändert, können wir nun ein und dieselbe Lambda-Funktion mehrfach aufrufen. So können wir auch sehen: »lambda« zitiert den Aufruf von ›lambda‹ nur (speichert ihn also nur ab), ausgewertet wird jener Aufruf erst bei Aufruf der lambda-Funktion.
- Protokoll
from random import random
r = lambda: print( random() )
r()
0.34093548594378934
r()
0.245724857292534093
Typen von Ausgaben °
Nur Objekte haben einen Typ. Ausgaben haben keinen Typ. Um das Zeichen »2« mit »print« auszugeben, ist daher »print( 2 )« die kürzeste Möglichkeit.
- Protokoll
print( 2 )
2
Die Verwendung eines str-Objekts ist nicht nötig, weil es im Ergebnis keinen Unterschied gibt.
- Protokoll
print( '2' )
2
Zeichengenaue Ausgabe von Numeralia ⃗
Wie schon früher behandelt wurde, wird bei ein Wert mit Nachkommastellen bei der Ausgabe manchmal auf eine bestimmte Anzahl von Stellen abgeschnitten.
- Eingabe eines Quelltextes und Ausgabe seines Wertes
12.00
12.0
- Eingabe eines Quelltextes und Ausgabe seines Wertes
3.1415926535897932
3.141592653589793
Der Text »12.00« oder der Text »3.1415926535897932« kann aber mit »print« und einem Zeichenfolgenliteral ausgegeben werden.
- Zeichengenaue Ausgabe eines Numerales
print( '12.00' )
12.00
- Eingabe eines Quelltextes und Ausgabe seines Wertes
print( '3.1415926535897932' )
3.1415926535897932
Übungsfragen
? Fachsprache
Setzen Sie jeweils eine Form der folgenden Verben ein: „übergeben“, „ausgeben“, „akzeptieren“, „einlesen“, „liefern“ und „zurückgeben“.
Mit »input« wird ein Wert __________ .
Mit »print« wird ein Wert __________ .
In »f( 5 )« wird der Wert «5» an die Funktion ›f‹ __________ .
In »f( 5 )« __________ die Funktion ›f‹ den Wert «5».
Von »input« wird ein str-Wert __________ .
- Ein Argumentwert wird an eine Funktion übergeben. Man kann dazu auch sagen, daß die Funktion den Argumentwert akzeptiert.
- Zum Ausgeben wird »print« verwendet.
- Zum Einlesen wird »input« verwendet.
- Von einer aufgerufenen Funktion wird ein Ergebniswert zurückgegeben oder geliefert.
Übungsaufgaben
/ Übungsaufgabe
Schreiben Sie eine Anweisung, bei deren Ausführung der Ausdruck »print( 2 )« ausgewertet wird.
»print« in Python 2 ⃗
In Python 2 war »print« ein Schlüsselwort, das auch ohne Klammern verwendet werden konnte – wie beispielsweise in der Python2 -Anweisung »print 2«.