Drei spezielle Namen von Python
»True«
Der Name »True« hat das Objekt ›True‹ als Wert.
Das Objekt ›True‹ soll die Bedeutung „wahr“ repräsentieren.
- Aussprachehinweis
- true tru
- Auswertung
True
True
»False«
Der Name »False« hat das Objekt ›False‹ als Wert.
Das Objekt ›False‹ soll die Bedeutung „falsch“ repräsentieren.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
False
False
- Aussprachehinweis
- false fɔls
»None«
Der Name »None« hat das Objekt ›None‹ als Wert.
Das Objekt ›None‹ soll die Bedeutung „nichts“ („kein Objekt“) repräsentieren.
Die Standard-Konsole von Python gibt bei Eingabe eines Ausdrucks mit dem Objekt ›None‹ als Wert dementsprechend auch nichts aus.
- Eingabe des Ausdrucks »None« in die Standard-Konsole
None
- (keine Ausgabe)
- Aussprachehinweis
- none nʌn
»True«, »False« und »None«
- The Python Language Reference Release 3.8.0a0 (gekürzt) *
- The following identifiers are used as reserved words, or keywords of the language, and cannot be used as ordinary identifiers. They must be spelled exactly as written here: False, None, True.
- The Python Language Reference Release 3.8.0a0 *
- An identifier occurring as an atom is a name.
Auch mit Werten der Klasse »NoneType« kann nicht potenziert werden.
- Konsolenprotokoll (Fehlermeldung wurde gekürzt und übersetzt)
3**None
TypFehler: falscher Operandentyp fuer **: 'int' und 'NoneType'
Typanforderungen sollen sinnlose oder schädliche Kombinationen verhindern, indem diese als Fehler gebrandmarkt werden
Dies kann man mit verschiedenen Typen von Steckern vergleichen, die es verhindern, daß man beispielsweise einen Kopfhörer in einen Starkstromanschluß steckt, und so einen elektrischen Schlag bekommt.
»bool«
Die beiden Objekte ›True‹ und ›False‹ haben die Klasse ›bool‹ (als Typ).
»NoneType«
Das Objekt ›None‹ hat die Klasse ›NoneType‹ (als Typ).
(Es gibt aber keinen vordefinierten Namen »NoneType«!)
Auswertung von Typennamen
Der Typ ›bool‹ hat den vordefinierten Namen »bool«.
- Protokoll
bool
<class 'bool'>
Für den Typ ›NoneType‹ gibt es keinen vordefinierten Namen!
- Protokoll
NoneType
NameError: name 'NoneType' is not defined
Die beiden Wahrheitsobjekte
Die bool-Objekte ›True‹ und ›False‹ werden dort, wo int-Werte erwartet werden, als Darstellung des Wertes «1» beziehungsweise «0» interpretiert.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
True + 1
2
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
True + True
2
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
True + False
1
Man erkennt den Typ »int« der Werte «1» und «0» oben daran, daß die Ausgabe weder einen Punkt (wie bei float-Werten) noch Apostrophe (wie bei str-Werten) enthält.
Da bool-Objekte somit auch als ganze Zahlen verwendet werden können, sieht man ›bool‹ auch als eine Unterklasse der Klasse ›int‹ an. Insofern ist auch der Typ ›bool‹ ein numerischer Typ.
- Klassenhierarchie
(Wert)
|
|
.-----------.-----'-----.-----------.
| | | |
| | | |
int float str NoneType
|
|
bool- Zitat *
- “The Boolean type is a subtype of the integer type, and Boolean values behave like the values 0 and 1, respectively ”
- The Python Language Reference, Release 3.7.0a1
- Anmerkung Der korrekte Name des “boolean type ” lautet »bool« – nicht »boolean«!
Teilnehmerfrage: Warum wird die Klasse ›NoneType‹ groß geschrieben?
Klassen werden normalerweise in dem Still wie ›NoneType‹ geschrieben (mit großen Anfangsbuchstaben).
Eine Ausnahme wird aber für aufrufbare Klassen (dieser Begriff wird erst später erklärt werden) und Klassen aus dem Modul ›builtins‹ (dieser Begriff wird erst später erklärt werden) gemacht (außer bei Namen von Ausnahmen [dieser Begriff wird erst später erklärt werden] und von Konstanten).
Die Namen der Typen ›bool‹, ›bytes‹, ›complex‹, ›dict‹, ›float‹, ›int‹, ›list‹, ›map‹, ›object‹, ›set‹, ›str‹, ›tuple‹, und ›type‹ (von denen noch nicht alle bisher auch schon vorgestellt wurden), werden also klein geschrieben, weil sie sich im Modul ›builtins‹ befinden und keine Namen von Ausnahmen sind.
Teilnehmerfrage: Was ist die genaue Bedeutung der Objekte ›True‹, ›False‹ und ›None‹?
Wichtig ist zunächst erst einmal, daß es drei verschiedene Objekte sind. Ihre genaue Bedeutung wird erst bei der Verwendung im Einzelfall konkret festgelegt. Beispielsweise könnte das Objekt ›None‹ als Ergebnis eines Suchprogramms bedeutet „Es wurde nichts gefunden.“. Hierfür könnte auch ›False‹ verwendet werden, aber falls ›False‹ bei diesem Programm schon eine andere Bedeutung hat, wäre dann immer noch ›None‹ dafür verfügbar.
Teilnehmerfrage: Was ist eigentlich genau ein „Objekt“?
Man kann sagen, daß ein Objekt der Wert eines Ausdrucks ist. Man stellt sich vor, daß solche Objekte beim Ablauf eines Programms existieren und von einem Programm manipuliert werden können.
Objekte können in Programmen alles mögliche darstellen. Wie eben angesprochen, kann ein Suchprogramm beispielsweise das Objekt ›None‹ übermitteln, wenn es ausdrücken will, daß es nicht gefunden hat. Der Empfänger dieser Nachricht kann dann dieses Objekt eindeutig erkennen und von anderen Objekte, wie ›False‹, unterscheiden. Auf diese Weise können Informationen festgehalten oder übermittelt werden.
Manche Objekte bieten noch zusätzliche, nützliche Möglichkeiten, die im weiteren Verlauf des Kurses vorgestellt werden sollen.
Übungsfragen
? Übungsfrage
Welche Werte haben die folgenden Ausdrücke?
- Die Werte der Ausdrücke sollen nach dem Lesen der Ausdrücke vorhergesagt werden, ohne sie dabei von einer von einer maschinellen Python -Implementation ausgewerten zu lassen.
- Ausdruck
True * 'abc'
- Ausdruck
False * 'def'
? Übungsfrage
Welche Werte haben die folgenden Ausdrücke?
- Die Werte der Ausdrücke sollen nach dem Lesen der Ausdrücke vorhergesagt werden, ohne sie dabei von einer von einer maschinellen Python -Implementation ausgewerten zu lassen.
- Ausdruck
( 1 - True )
- Ausdruck
( 1 - False )
- Ausdruck
True * 'abc' + False * 'def'
- Ausdruck
True * 'abc' +( 1 - True )* 'def'
- Ausdruck
False * 'abc' +( 1 - False )* 'def'
Fluchtwerte ⃗
Ein Fluchtwert hat eine Bedeutung, die seiner Form widerspricht. Das Objekt ›None‹ soll „kein Objekt “ bedeuten.
Vergleichen kann man dies mit einer Situation, in der auf eine Frage mit „Kein Kommentar“ geantwortet wird. „Kein Kommentar“ ist ein Kommentar, aber soll bedeutet, daß es keinen Kommentar gibt.
Ein anderer Vergleich: Jemand wird gefragt, wie viele Äpfel er kaufen will. Die Frage legt eine Antwort der Form „Ich möchte … Äpfel kaufen.“ nahe. Es steht also schon fest, daß jemand grundsätzlich Äpfel kaufen möchte, und jetzt geht es nur noch darum, wie viele. Der „Fluchtwert“ „0“ erlaubt es aus dem vorgegebenen Rahmen auszubrechen und innerhalb des Rahmens auszudrücken, daß man gar keine Äpfel kaufen möchte: „Ich möchte 0 Äpfel kaufen.“. Man flieht also aus dem vorgegebenen Rahmen, indem man etwas einsetzt, daß formal erlaubt ist, aber inhaltlich das Gegenteil der Aussage „Ich möchte Äpfel kaufen.“ ausdrückt. Daher handelt es sich um einen Fluchtwert.
Man kann es auch so sagen: Das Objekt ›None‹ soll in einigen Fällen lediglich als eine Art eines nicht-informativen Platzhalters die Abwesenheit eines „normalen“ Objektes kennzeichnen (also die Abwesenheit eines anderen Objektes als ›None‹). Es kann beispielsweise verwendet werden, wenn aus formalen Gründen ein Objekt angegeben werden muß, aber es inhaltlich keinen besonderen Grund gibt, einen bestimmtes informatives Objekt anzugeben, oder das inhaltlich richtige Objekt nicht angegeben werden kann, weil es nicht bekannt ist.