Wissensdatenbank von GCSoft

>> Wissensdatenbank / Python 3

Numerische Datentypen

Alle numerischen Datentypen sind unmutable, das bedeutet, nach jeder Veränderung wird eine neue Instanz erzeugt.

Es gibt folgende numerische Datentypen:

Arithmetische Operatoren

Für alle numerischen Datentypen sind die folgenden arithmetischen Operatoren definiert:
+, -, *, /, %, +x, -x, **, //
Die Operatoren % und // sind für complex nicht definiert.

Zusätzlich gibt es sogenannte erweiterte Zuweisungen (augmented assignments):
+=, -=, *=, /=, %=, **=, //=

Vergleichende Operatoren

Ein vergleichender Operator ist ein Operator, der aus zwei Instanzen einen Wahrheitswert berechnet.

Die vergleichenden Operatoren, die für numerische Datentypen definiert sind:
==, !=, <, <=, >, >=

Konvertierung zwischen numerischen Datentypen

Numerische Datentypen können über die eingebauten Funktionen int, float, bool und complex ineinander umgeformt werden.
Dabei können je nach Umformung Informationen verloren gehen.
Beispiel: int(33.5)
33

Ganzzahlen - int

Der Datentyp int unterliegt in seinem Wertebereich keinen prinzipiellen Grenzen.

Seit Python 3.6 kann ein Unterstrich verwendet werden, um die Ziffern eines Literals zu gruppieren:
i = 1_000_000

Zahlensysteme

Bit-Operationen

Für den Daentyp int sind einige zusätzliche Operatoren definiert, die sich explizit auf die binäre Darstellung der Zahl beziehen:
&, |, ^, ~, <<, >>

~x = -x-1

Ein Shift um x Stellen nach rechts (>>) entspricht einer ganzzahligen Division durch 2^x, nach links (<<) einer Multiplikation.

Methoden

Der Datentyp int verfügt über eine Methode bit_length, die die Anzahl Stellen brechnet, die für die
Binärdarstellung der Zahl benötigt werden.
(4345).bit_lengt() --> 13

Gleitkommazahlen - float

Zum Speichern einer Gleitkommazahl mit begrenzter Genauigkeit wird der Datentyp float verwendet.

Python unterstützt die Exponentialschreibweise: v = 3.141e-12
Durch ein kleines oder großes e wird die Mantisse (3.141) vom Exponenten (-12) getrennt. Sowohl Mantisse als auch der Exponent
müssen im Dezimalsystem angegeben werden.

Aufgund der Begrenzheit von float können reelle Zahlen nicht unendlich präzise gespeichert werden.
1.1 + 2.2 = 3.3000000000000003

Es gibt für float eine Ober- und eine Untergrenze. Werden diese Grenzen über- bzw. unterschritten, wird die
Zahl als inf bzw. -inf gespeichert, somit können diese Zahlen weiterhin mit anderen Zahlen verglichen werden.
Zwei unendlich große Gleitkommazahlen lassen sich addieren oder multiplizieren, das Ergebnis ist in beiden Fällen wieder inf.
Die Subtraktion bzw. Division zweier unendlicher Zahlen ist nicht sinnvoll, das Ergebnis ist nan (not a number).

Boolesche Werte - bool

Eine Instanz des Datentyp bool kann nur zwei Werte annehmen: True oder False.

Logische Operatoren

not x, x and y, x or y

Ein Operator für ein logisches ausschließendes (exklusives) ODER existiert in Python nicht, lässt sich aber wie folgt nachbilden:
(x or y) and not (x and y)

Wahrheitswerte nicht-boolescher Datentypen

Mithilfe der Built-in Function bool lassen sich Instanzen eines jeden Basisdatentyps in einen booleschen Wert überführen:
bool([1, 2, 3]) = True
bool("") = False
bool(-7) = True

Für jeden Basisdatentyp ist ein bestimmter Wert als False definiert. Alle davon abweichenden Werte sind True.

False-Wert der Basisdatentypen:

Basisdatentyp False-Wert Beschreibung
NoneType None der Wert None
int 0 der numrische Wert Null
float 0.0 der numrische Wert Null
bool False der boolesche Wert False
complex 0 + 0j der numrische Wert Null
str "" ein leerer String
list [] eine leere Liste
tuple () ein leeres Tuple
dict {} ein leeres Dictionary
set set() eine leere Menge
frozenset frozenset() eine leere Menge

Auswertung logischer Operatoren

Python wertet logische Ausdrücke grundsätzlich von links nach rechts aus.
Python bricht die Auswertung enes Ausdrucks sofort ab, wenn das Ergebnis feststeht (Lazy Evaluation).

Python gibt den ersten Operanden mit dem Wahrheitswert True zurück.
0 or 1 ==> 1 (und nicht True)

Komplexe Zahlen - complex

Komplexe Zahlen bestehen aus einem reellen Realteil und einem Imaginärteil:
Beispiel: 3 + 4j

Das j des Imaginärteils steht für: j² = -1

Die Menge der vergleichenden Operatoren ist auf == und != beschränkt.

Der Datentyp complex besitzt zwei Attribute: x.real und x.imag.

Die Methode x.conjugate() liefert die zu x konjugierte komplexe Zahl.