Seite 1 von 1
aktuelle recursion depth ermittlen
Verfasst: Donnerstag 7. Juni 2007, 20:40
von Costi
tachchen,
gibts ne moeglichkeit die aktuelle recusion depth zu ermitteln?
also sowas wie: (achtung, pseudocode)
Code: Alles auswählen
def test(n):
if type(n) == list:
print recursion_depth
test(n[1:])
test([1,2,3,4])
#dan wird ausgedruckt:
1
2
3
4
Verfasst: Donnerstag 7. Juni 2007, 21:11
von BlackJack
"Eingebaut" ist mir nichts bekannt. Lässt sich aber leicht mit einem zusätzlichen Zähler als Argument realisieren.
Verfasst: Donnerstag 7. Juni 2007, 21:26
von birkenfeld
Man könnte natürlich im Frameobjekt herumkramen, allerdings ist der weitergereichte Zähler die Methode der Wahl.
Verfasst: Donnerstag 7. Juni 2007, 21:31
von sunmountain
Verfasst: Donnerstag 7. Juni 2007, 21:36
von Costi
hmmmm?:
resultiert in:
Code: Alles auswählen
UnboundLocalError: local variable 't' referenced before assignment
ist das ein bug?
ich kann inerhalb der "test" funktion auf t zugreifen und sein wert auch veraendern. Aber warum nicht um eins erhoen?
edit:
ich probier dan erstmal sunmountain`s methode aus (er hat geposted waehrend ich schrieb)
Verfasst: Donnerstag 7. Juni 2007, 21:47
von BlackJack
Das ist kein Bug. Jeder Name, der in einer Funktion neu gebunden wird, ist lokal. Damit hast Du ein `t` auf Modulebene und ein anderes, lokales `t` in der Funktion. Und das versuchst Du zu lesen, bevor es gebunden wurde.
Verfasst: Donnerstag 7. Juni 2007, 22:07
von Costi
hmmm, thx jetzt kapier ichs
ich kann drauf zugreifen:
und es auch fuer die funktion lokal veraendern
wenn ich aber drauf zugreifen und es dan veraendern (+=) will, muesste doch eine fuer die funktion lokale varieble erstellt werden, die (in diesen fall) um eins groesser ist als die variable auf modulebene?
aber egal ich habs jetzt:
Code: Alles auswählen
class Save:
t = 0
save = Save()
def test():
save.t += 1
test()
test()
print save.t
und ich mach dan mal fuer heute schluss.
cu
Verfasst: Donnerstag 7. Juni 2007, 22:17
von BlackJack
Costi hat geschrieben:hmmm, thx jetzt kapier ichs
ich kann drauf zugreifen:
und es auch fuer die funktion lokal veraendern
wenn ich aber drauf zugreifen und es dan veraendern (+=) will, muesste doch eine fuer die funktion lokale varieble erstellt werden, die (in diesen fall) um eins groesser ist als die variable auf modulebene?
Nein, Du greifst ja nicht auf den Namen auf Modulebene zu, sondern auf das *lokale* `t`, das an der Stelle an noch kein Objekt gebunden wurde.