Montag, 30. September 2013
Python Objekte, Aufrufstack (POS1: 2BHIF)
Objekte
In Python sind alle Elemente Objekte. Folgendes Beispiel enthält ein paar solche Objekte:def fun(x): # auch ein Objekt! y = x * x return y f2 = fun # f1 ist eine Refernz auf fun lst = [1, 2, fun] # Liste mit 3 Objekten l2 = lst # l2 ist eine Refernz auf obige Liste erg = fun(2) print(erg) erg = f2(3) print(erg) print(f2 == fun) print(l2 == lst) print(lst)
Folgendes Bild zeigt den Speicher, wenn das Progarmm in der Zeile 3 angelangt ist, nach dem
f2(3)
(ist ja fun(3)
) in der Zeile 12 Aufgerufen wurde.
Sie können den Ablauf unter folgendem Link testen: objects.py
Sie sehen auf der rechten Seite die Objekte, welche Python angelegt hat. Der linke Bereich ("Frames") zeigt den Speicher, den Python für die (globalen) Variablen anlegt sowie den Speicher für die aufgerufene Funktion. Für jede Funktion wird so ein Bereich (Frame) angelegt und beim beenden wieder zerstört.
Pfeile stellen Referenzen dar. Zum Beispiel stellt der Pfeil von
lst
zum Listenobjekt [1, 2, fun]
dar. Auch l2
ist eine Referenz zu dieser Liste.
In dieser Liste gibt es eine weitere Referenz zur Funktion
fun
. Funktionsnamen sind also Referenzen zu "Funktions-Objekten" (die den Code der Funktion "enthalten").
Aufrufstack
Beim folgenden Beispiel können Sie sehen, wie Frames sich bei den Aufrufen der Funktionfact()
stapeln und dann in Folge wieder zerstört werden:
def fact(n): if n > 1: return n * fact(n - 1) else: return 1 f = fact(5) print(f)
Folgendes Bild zeigt die Frames, wenn das Programm die Zeile 5 erreicht (aber nicht ausgeführt) hat. Sie sehen einen Stapel von Frames. Ein Frame pro Aufruf. Diese Frames werden anschließend bei jedem
return
wieder zerstört. Man nennt diesen Stapel Aufrufstack:
Sie können den Ablauf unter folgendem Link testen: fact.py
Labels: allgemeines, POS1-2, Python
Abonnieren Posts [Atom]
Kommentar veröffentlichen