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

aktuelle recursion depth ermittlen

Beitragvon Costi » 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

Beitragvon 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

Beitragvon birkenfeld » 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/
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

Beitragvon sunmountain » Donnerstag 7. Juni 2007, 21:31

Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » 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

Beitragvon 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

Beitragvon Costi » 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

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]