In diesem Buch werden diverse Beispiele direkt auf der Konsole ausprobiert. Der Grund besteht vor allem darin, dass Python eine interaktive Kommandozeilenapplikation als REPL (Read-Eval-Print-Loop) bietet, die wir nachfolgend kurz kennenlernen wollen.
Der Python-Kommandozeileninterpreter wird unter Windows mit dem Kommando python und unter macOS mit python3 gestartet und erlaubt einen interaktiven Arbeitsstil und das Ausführen kleinerer Sourcecode-Schnipsel. Wie gerade erwähnt, spricht man dabei auch von REPL (Read-Eval-Print-Loop). Dadurch wird es möglich, etwas Python-Sourcecode zu schreiben und Dinge schnell auszuprobieren, ohne dafür die IDE starten und ein Projekt anlegen zu müssen. Über das Ausmaß des Gewinns lässt sich sicherlich streiten. Überaus praktisch ist es für erste Experimente und für Prototyping.
Starten wir die REPL und probieren einige Aktionen und Berechnungen aus. Dabei dient mal wieder eine Abwandlung eines Hello-World-Beispiels als Startpunkt:
$ python3
Python 3.11.2 (v3.11.2:878ead1ac1, Feb 7 2023, 10:02:41) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> print("Hello Python")
Hello Python
Danach addieren wir zwei Zahlen:
>>> 2 + 2
4
Auch die Definition eigener Funktionen ist wie folgt möglich:
>>> def add(m, n):
... return m + n
...
Bei der Eingabe erkennt der Python-Kommandozeileninterpreter praktischerweise, wenn Anweisungen nicht vollständig sind und noch weitere Eingaben in einer Folgezeile benötigt werden. Dies wird durch die drei Punkte am Anfang einer Zeile ausgedrückt. Um dann nach dem return die Definition der Funktion und Eingabe zu beenden, müssen Sie dann zweimal Return drücken.
Bei Eingaben in der REPL müssen Sie pingelig auf die Einrückung achten. Denn hat man sich dabei einmal vertan, lässt sich der Fehler oft nur mühsam korrigieren. Daher empfehle ich abgesehen von kleinen Experimenten fast immer den Einsatz einer IDE wie die unter https://www.jetbrains.com/de-de/pycharm/ frei verfügbare IDE PyCharm.
Nach Abschluss der Definition kann man eine solche Funktion dann wie erwartet aufrufen:
>>> add(7, 2)
9
Es sind aber auch etwas komplexere Aktionen möglich, etwa eine Liste und einen Lambda-Ausdruck zu definieren und dann eine Filterung vorzunehmen:
>>> names = ["Tim", "Jim", "Tom", "James", "Mike", "John"]
>>> startsWithJ = lambda str: str.lower().startswith("j")
>>> filtered_names = list(filter(startsWithJ, names))
>>> print(filtered_names)
['Jim', 'James', 'John']
Selbstverständlich kann man auch if-Abfragen ausführen:
>>> if names.index("Mike") >= 0:
... print("Found Mike")
... else:
... print("No Mike found")
...
Found Mike
Wenn Sie allerdings auch so krumme Finger wie der Autor haben, dann ist schnell mal ein Tippfehler gemacht, der sich in der REPL leider nur schwierig bzw. umständlich korrigieren lässt.
Außerdem bietet der Python-Kommandozeileninterpreter eine Historie der Befehle, was nützlich sein kann, um ein vorheriges Kommando wiederholt auszuführen. Folgende Tastaturkürzel erleichtern das Editieren und Navigieren:
Wie eben gesehen ist die Definition von Listen möglich – das geht auch für Mengen und Dictionaries und sogar recht komfortabel:
>>> numbers = [1, 2, 3, 4, 5, 6, 7]
>>> names = {"Tim", "Mike", "Max"}
>>> name_to_age = {"Tim" : 41, "Mike" : 42}
>>>
>>> print(name_to_age)
{'Tim': 41, 'Mike': 42}
Natürlich kann man dann diverse Aktionen darauf ausführen:
>>> numbers += name_to_age.values()
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 41, 42]
>>>
>>> names.update({"Peter", "Jim"})
>>> names
{'Mike', 'Max', 'Peter', 'Tim', 'Jim'}
Schließlich kann man den Python-Kommandozeileninterpreter mit exit() beenden.