aktuelle recursion depth ermittlen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Donnerstag 7. Juni 2007, 20:40

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
cp != mv
BlackJack

Donnerstag 7. Juni 2007, 21:11

"Eingebaut" ist mir nichts bekannt. Lässt sich aber leicht mit einem zusätzlichen Zähler als Argument realisieren.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Donnerstag 7. Juni 2007, 21:26

Man könnte natürlich im Frameobjekt herumkramen, allerdings ist der weitergereichte Zähler die Methode der Wahl.
Zuletzt geändert von birkenfeld am Donnerstag 7. Juni 2007, 21:41, insgesamt 1-mal geändert.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Donnerstag 7. Juni 2007, 21:36

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)
cp != mv
BlackJack

Donnerstag 7. Juni 2007, 21:47

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.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Donnerstag 7. Juni 2007, 22:07

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
cp != mv
BlackJack

Donnerstag 7. Juni 2007, 22:17

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.
Antworten