270
Funktionen mit Wert
Kapitel
1
0
>>> from math import sqrt
>>> laufzeit(100000, sqrt, 2)
0.05874517571367477
Für die Ermittlung von Zufallszahlen verwenden wir diesmal die Funktion
randrange()
, weil sie mit
einem
Argument verwendet werden kann.
randrange(n)
liefert Zufallszahlen aus dem Bereich
range(n)
.
>>> from random import randrange
>>> laufzeit(100000, randrange, 100)
0.19924347926901476
Die Berechnung einer Zufallszahl dauert etwa 4 Mal so lange wie die Bere-
chung einer Quadratwurzel.
Es ist im Allgemeinen nicht sinnvoll, das Laufzeitverhalten von Funktio-
nen zu messen, die
print
-Anweisungen enthalten, besonders nicht,
wenn du mit der IDLE arbeitest.
print
-Anweisungen brauchen norma-
lerweise im Vergleich zu Berechnungen innerhalb einer Funktion den Lö-
wenanteil der Zeit.
Was ist Nichts?
Im vorigen Abschnitt haben wir die »leere Anweisun
pass
kennen ge-
lernt, die »nichts macht«. Mit ihr können wir leicht eine Funktion
test
definieren, die ebenfalls nichts macht, also auch nichts zurückgibt:
def test():
pass
Was heißt das? Bevor wir jetzt in eine philosophische Diskussion über die
Frage abgleiten, ob Nichts nichts oder doch etwas ist, besinnen wir uns auf
die richtige Haltung von Python-Fuzzis – nämlich den IPI zu fragen, wenn
uns etwas unklar ist: Kannst du Nichts ausdrucken, oder wirst du doch
nichts ausdrucken?
>
Mach mit:
>>> test()
>>> print(test())
None
>>>
Wie du nun siehst, hat
test
ein Objekt (an
print()
) zurückgegeben und
print()
hat es ausgedruckt: das Objekt
None
. Übrigens ist
None
in Python
271
Was ist Nichts?
ein reserviertes Wort. Im Englischen bedeutet das Wörtchen none so viel
wie »keines« oder auch »nichts«. Du kannst den obigen IPI-Dialog also auch
so interpretieren:
»Drucke aus, was die Funktion
test()
zurückgibt!«
»Nichts!«
In der Tat ist dieses
None
ein besonderes Objekt in Python, denn von sei-
nem Typ gibt es nur ein einziges. (Im Gegensatz z.
B. zu Objekten vom Typ
int
: Zahlen gibt es viele.)
None
wird von jeder Funktion zurückgegeben,
die kein anderes Objekt zurückgibt.
>>> from turtle import *
>>> print(forward(50))
None
>>> from mytools import jump
>>> print(jump(50))
None
Du hast selbst
jump()
programmiert und nichts dafür getan, dass
None
zurückgegeben wird. Das geschieht automatisch.
Der IPI schreibt alle zurückgegebenen Werte von Ausdrücken – wie du
schon weißt, in »roher Form« – immer gleich hin. Deshalb ist er ja so prak-
tisch. Er schreibt aber niemals ein zurückgegebenes
None
hin. Auch das ist
eine gute Einrichtung. Es hätte dich bei unseren IPI-Experimenten mit Turt-
le-Grafik-Anweisungen sicherlich sehr genervt, wenn nach jeder
forward
-
oder
left
-Anweisung
None
erschienen wäre.
Im Übrigen ist dieses stets ausgegebene
None
an sich ganz uninteressant.
Wenn dir jemand auf alle Fragen immer nur dasselbe antwortet, dann hat
diese Antwort null Informationswert.
Dementsprechend kommen auch Anweisungen wie
print(forward(50))
in praktischen Programmen nicht vor. Du solltest nur wissen, dass dieses
None
stets da
ist.
Jede Python-Funktion gibt ein Objekt zurück.
Wenn im Code der Funktion in einer
return
-Anweisung
ein Objekt als Argument angegeben wird, wird dieses zurückgegeben.
In allen anderen Fällen wird
None
zurückgegeben.
Denkst du dir jetzt: »Wozu das Ganze?« Glaubst du vielleicht, dass Nichts
zu nichts gut ist? Dann möchte ich dir hier eine nützliche Anwendung von
None
zeigen:

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.