AW: [Python-de] Rekursiver Funktionsaufruf

Rene Liebscher R.Liebscher at gmx.de
Fri Jun 22 16:16:43 EDT 2001


Siggy Brentrup wrote:
> 
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Rene Liebscher <R.Liebscher at gmx.de> writes:
> 
> [...]
> 
> > Mir geht es hier eher um das Prinzip als das dieses Beispiel an sich
> > laeuft. Ich will wissen, ob ich das Funktionsobjekt einer laufenden
> > Funktion irgendwie rauskriege. (Wenn es schon nicht mit der einfachen
> > Variante geht.) Ich denke wenn Python schon lokale Funktionen erlaubt,
> > dann sollte man diese auch genauso rekuriv schreiben duerfen, wie solche
> > auf Modulebene.
> 
> IIRC geht das nur ueber die Hintertuer, indem Du eine Exception
> erzeugts und in der except clause das traceback Objekt analysierst;
> das ist natuerlich reichlich ineffizient.
Aber es funktioniert tatsaechlich!

def a():
    def f(i):
        try:
            raise ""
        except:
            import sys
            tb = sys.exc_info()[2]
        def f(i): # create function object
            pass
        f.func_code = tb.tb_frame.f_code
        
        if i<1: return 1
        return i*f(i-1)
    
    print f(10)

a()

> 
> In Version 2.1 gibt es ein inspect Modul, der das erleichtert, aber da
> hast Du ja nested_scopes, die ab 2.2 wohl Standard werden :-)
> 
> Siggy
>



More information about the Python-de mailing list