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?:

Code: Alles auswählen

t = 0
def test():
    t  += 1
test()
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:

Code: Alles auswählen

t = 0
def test():
    print t
test()
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:

Code: Alles auswählen

t = 0
def test():
    print t
test()
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.