Course
Operatoren in Python
Genau wie in der Mathematik gibt es in Programmiersprachen wie Python Operatoren. Du kannst sie dir als extrem einfache Funktionen vorstellen, die die Grundlage der Informatik bilden. Dies sind die einfachsten Operationen, auf die ein Computerprogramm reduziert werden kann. Diese Kenntnisse sind für jeden angehenden Data Scientist oder Software Engineer unerlässlich.
In diesem Tutorium lernst du Folgendes
- Die verschiedenen Arten von Betreibern: Arithmetik, Zuweisung, Vergleich und Logik
- Operator Überlastung
- Vorrang
- Assoziativität
Wenn du mehr über die Grundlagen der Programmiersprache Python erfahren möchtest, solltest du dir unseren kostenlosen Kurs "Einführung in Python für Data Science " ansehen.
Artithmetische Operatoren
Du kennst sie wahrscheinlich schon, denn sie kommen aus der Grundmathematik.
Die arithmetischen Operatoren sind Addition (+
), Subtraktion (-
), Multiplikation (*
), Division (/
), Exponent (**
), Bodenteilung (//
) und Modulus (%
). Die ersten vier sind ziemlich einfach: Addition, Subtraktion, Multiplikation und Division, mit denen du wahrscheinlich schon vertraut bist.
# Addition
print(5 + 2)
# Subtraction
print(5 - 2)
# Multiplication
print(5 * 2)
# Division
print(5 / 2)
7
3
10
2.5
Die anderen drei sind ein bisschen komplizierter. Der Exponent-Operator bedeutet "hochgezählt von". Zum Beispiel bedeutet 2 ** 3
, dass 2
mit sich selbst multipliziert wird 3
mal, also ist 2 ** 3
das gleiche wie 2 * 2 * 2
, was gleich 8 ist.
Die Bodenteilung ist dasselbe wie die normale Division, nur dass das Ergebnis immer nach unten abgerundet wird. In dem folgenden Beispiel wird 5 durch 2 geteilt, was 2,5 ergibt. Da es sich aber um die Bodenklasse handelt, wird 2,5 auf 2 abgerundet.
Der Modulus schließlich ist der Rest nach der Division. Im Fall von 5%2
passt die Zahl 2 nur zweimal in 5, was bedeutet, dass der Rest 1 ist.
# Exponent
print(5 ** 2)
# This is the same as 5 * 5
# Floor Division
print(5 // 2)
# Modulus
print(5 % 2)
25
2
1
In Python kann der Additionsoperator auch verwendet werden, um Zeichenketten zu verketten. Das bedeutet, dass sie z.B. zu einem einzigen String zusammengefügt werden:
firstName = "Théo"
introduction = "Hi, my name is " + firstName + "."
print(introduction)
Hi, my name is Théo.
Zuweisungsoperatoren
Wenn du etwas Programmiererfahrung hast, hast du sicherlich schon einmal Zuweisungsoperatoren verwendet. Sie weisen einer Variablen einen bestimmten Wert zu. Die meistgenutzte ist =
. Um sie zu benutzen, gibst du einfach den Namen der Variablen, der du einen neuen Wert zuweisen möchtest, die =
und den Wert ein, der zugewiesen werden soll. Wenn du zum Beispiel der Variablen balance
den Wert 100 zuweisen möchtest, kannst du wie folgt vorgehen:
balance = 100
print(balance)
100
Wenn du den Wert von balance
um 10 erhöhen möchtest, kannst du balance += 10
verwenden. Das ist das Äquivalent zu balance = balance + 10
, aber es ist viel kürzer.
balance += 10
print(balance)
110
Das Gleiche gilt für -=
, balance -= 10
ist dasselbe wie balance = balance - 10
:
print(balance)
balance -= 10
print(balance)
110
100
Die anderen Zuweisungsoperatoren funktionieren auf genau dieselbe Weise. Diese sind:
*=
/=
**=
//=
%=
Vergleichsoperatoren
Du kannst Vergleichsoperatoren verwenden, um, du hast es erraten, die Werte von Variablen zu vergleichen. Sie geben immer einen booleschen Wert zurück, der entweder True
oder False
lautet. Es gibt sechs von ihnen:
- Gleichberechtigt:
==
- Nicht gleich:
!=
- Größer als:
>
- Weniger als:
<
- Größer als oder gleich:
>=
- Kleiner als oder gleich:
<=
Hier sind einige Vergleichsbeispiele:
a = 3
b = 5
print(a == b) # Equal
print(a != b) # Not equal
print(a > b) # Greater than
print(a < b) # Less than
print(a >= b) # Greater than or equal to
print(a <= b) # Less than or equal to
False
True
False
True
False
True
==
und !=
können auch verwendet werden, um Zeichenketten anstelle von Zahlen zu vergleichen. Die anderen Operatoren sind nicht mit Zeichenketten kompatibel, da eine Zeichenkette nicht wirklich größer als eine andere Zeichenkette sein kann.
print("Hello" == "World")
print("Python" != "R")
False
True
Logische Operatoren
Die kennst du vielleicht schon! In der Logik werden sie logische Konnektive genannt. Diese sind auch in der menschlichen Sprache weit verbreitet. Sie lauten: and
, or
und not
.
and
gibt nur True zurück, wenn beide Operanden (die beiden booleschen Objekte, die du vergleichst) True sind. Zum Beispiel:
print(True and True)
print(True and False)
print(False and False)
True
False
False
Um das Verhalten dieses logischen Operators zu verstehen, kannst du eine Wahrheitstabelle verwenden:
a | b | a und b |
---|---|---|
Wahr | Wahr | Wahr |
Wahr | Falsch | Falsch |
Falsch | Wahr | Falsch |
Falsch | Falsch | Falsch |
or
wahr ist, wenn ein (oder mehrere) Operanden wahr sind.
print(True and True)
print(True and False)
True
False
a | b | a oder b |
---|---|---|
Wahr | Wahr | Wahr |
Wahr | Falsch | Wahr |
Falsch | Wahr | Wahr |
Falsch | Falsch | Falsch |
Beachte, dass diese auch mit mehr als zwei Operanden funktionieren, zum Beispiel:
print(True and True and True and True)
print(True and True and True and False)
print(False or False or False or False)
print(False or False or False or True)
True
False
False
True
not
gibt das Gegenteil seines Operanden zurück, also True
, wenn False
angegeben ist und umgekehrt.
print(not True)
False
a | nicht ein |
---|---|
Wahr | Falsch |
Falsch | Wahr |
Operator-Überladung
Erinnere dich daran, dass du vorhin gesehen hast, wie +
verwendet werden kann, um Zahlen zu addieren, aber auch, um Zeichenketten zu verbinden oder zu verknüpfen. +
funktioniert also unterschiedlich, je nachdem, für welche Art von Objekt du es verwendest. Aber das wird nicht immer der Fall sein. Manchmal unterstützt der Operator, mit dem du arbeitest, einfach nicht die Art von Objekt, für die du ihn verwenden möchtest.
Hier ist ein Beispiel. Angenommen, du hast zwei Dog
Objekte, ozzy
und filou
. Diese gehören zu der Klasse Dog
unten. Du kannst dir die Klasse als Entwurf dafür vorstellen, wie die Objekte aussehen und wie sie sich verhalten sollen. In diesem Fall haben die Dog
Objekte einen Namen, ein Alter und eine Größe. Nachdem die Klasse definiert ist, kannst du Objekte instanziieren. Einer von ihnen ist Ozzy, 3 Jahre alt und 30 Zentimeter groß. Der andere ist Filou, er ist 5 Jahre alt und 65 Zentimeter groß.
Dieses Beispiel verwendet das Konzept der objektorientierten Programmierung. Wenn du mehr darüber erfahren möchtest, solltest du unser Tutorial über objektorientierte Programmierung in Python lesen
Angenommen, du möchtest beide Hunde mit dem Größer als vergleichen: >
. Das wird nicht funktionieren. Du wirst die Fehlermeldung '>' not supported between instances of 'Dog' and 'Dog'
erhalten. Das bedeutet, dass >
nicht weiß, wie man Objekte der Klasse Dog
vergleichen kann.
class Dog:
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
ozzy = Dog("Ozzy", 3, 30)
filou = Dog("Filou", 5, 65)
print(filou > ozzy)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-96-428069ab24cc> in <module>()
9 filou = Dog("Filou", 5, 65)
10
---> 11 print(filou > ozzy)
TypeError: '>' not supported between instances of 'Dog' and 'Dog'
Glücklicherweise kannst du mit der Operatorüberladung das Verhalten des Operators definieren, wenn er auf Dog
Objekten aufgerufen wird. In diesem Fall muss eine Methode namens __gt__
definiert werden, die "größer als" bedeutet und zwei Argumente entgegennimmt. Da wir unsere Hunde anhand ihrer Größe vergleichen wollen, gibt die Methode self.height > other.height
zurück.
class Dog:
def __init__(self, name, age, height):
self.name = name
self.age = age
self.height = height
def __gt__(self,other):
return self.height > other.height
ozzy = Dog("Ozzy", 3, 30)
filou = Dog("Filou", 5, 65)
print(filou > ozzy)
print(ozzy > filou)
True
False
Vorrang
Wenn du viele Operatoren kombinierst, kann es verwirrend werden. Sieh dir das folgende Beispiel an:
a = 2
b = 3
c = 9
a ** b > 5 and c - a // b >= 9 or b ** 2 == c
True
Woher weißt du, welcher von ihnen zuerst ausgeführt werden wird? Wie solltest du eine Codezeile mit vielen dieser Symbole lesen? Wird es von links nach rechts ausgeführt oder gibt es eine bestimmte Reihenfolge?
Hier kommt der Vorrang ins Spiel. Python-Operatoren werden in einer ganz bestimmten Reihenfolge ausgeführt, und einige haben Vorrang vor anderen.
In der folgenden Tabelle siehst du den Vorrang der Operatoren in der Reihenfolge von oben nach unten. Diese Regeln gelten auch in der Mathematik, wo bestimmte Berechnungen in einer Formel vor anderen ausgeführt werden müssen.
Vorrang | Betreiber | Beschreibung |
---|---|---|
1 | ** | Exponent |
2 | *, /, %, // | Multiplizieren, Dividieren, Modulo, Bodenteilung |
3 | +, - | plus, minus |
4 | >, <, >=, <= | comparison |
5 | ==, != | Gleichstellung |
6 | = %= /= //= -= += *= **= | Auftrag |
7 | und, oder, nicht | logisch |
Assoziativität
Du hast gesehen, dass Vorrang wichtig ist! Aber was ist mit denen, die auf der gleichen Prioritätsebene liegen, wie Multiplikation und Division? Werden sie zur gleichen Zeit ausgeführt? Nein. *
, \
, %
und \\
werden von links nach rechts ausgeführt, während **
von rechts nach links ausgeführt wird. Das nennt man Assoziativität.
Sieh dir das folgende Beispiel an. In diesem Fall werden die Operatoren von links nach rechts ausgeführt, und die Ausgabe ist 3.
print(5 * 2 // 3)
3
Indem du Klammern hinzufügst, kannst du jedoch die Reihenfolge ändern, in der die Operatoren ausgeführt werden. Das ist die Assoziativität, die genauso funktioniert wie die Assoziativität in der Mathematik. Was auch immer zwischen den Klammern steht, wird zuerst berechnet. In diesem Fall wird zuerst die Bodenteilung durchgeführt, gefolgt von der Multiplikation.
print(5 * (2 // 3))
Fazit
Du weißt jetzt, was Operatoren sind, wie du sie verwenden solltest und wie sie funktionieren. Du hast auch etwas über Überladung, Vorrang und Assoziativität gelernt. Du bist auf dem besten Weg, ein Python-Meister zu werden! Wenn du noch mehr lernen willst, solltest du dir unseren Kurs Intermediate Python for Data Science ansehen.
Python-Kurse
Course
Intermediate Python
Course