2009-05-12 11 views
18

Wenn ich eine Funktion definieren:Python: immer einen Verweis auf eine Funktion von innen selbst

def f(x): 
    return x+3 

ich kann später speichern Objekte als Attribute der Funktion, etwa so:

f.thing="hello!" 

würde ich mag dies von innerhalb des Codes der Funktion selbst tun. Problem ist, wie bekomme ich einen Verweis auf die Funktion von innen selbst?

+2

Warum brauchst du das? Was versuchst du zu machen? –

+1

siehe auch http://stackoverflow.com/questions/3109289/how-can-python-function-access-its-own-attributes – mykhal

Antwort

19

Auf die gleiche Weise, verwenden Sie einfach seinen Namen.

>>> def g(x): 
... g.r = 4 
... 
>>> g 
<function g at 0x0100AD68> 
>>> g(3) 
>>> g.r 
4 
+0

@Roger: Nun, das war die Art, wie mein Dolmetscher es zeigte .. – SurDin

+0

Ich war verwirrt durch die Formatierung der Ausgabe, aber erkannte den Code und die Antwort ist solide (+1). Dies ist, was die "normale" Python REPL zeigt, und sollte für mehr Leute erkennbar sein. Welchen Dolmetscher hast du benutzt? –

3

Wenn Sie versuchen, memoization zu tun, Sie ein Wörterbuch als Standardparameter verwenden:

def f(x, memo={}): 
    if x not in memo: 
    memo[x] = x + 3 
    return memo[x] 
2

oder einen Verschluss verwenden:

def gen_f(): 
    memo = dict() 
    def f(x): 
     try: 
      return memo[x] 
     except KeyError: 
      memo[x] = x + 3 
    return f 
f = gen_f() 
f(123) 

Etwas schöneres IMHO

Verwandte Themen