2009-05-12 22 views
18

Gdybym zdefiniować funkcję:Python: uzyskiwanie odwołanie do funkcji od wewnątrz samego

def f(x): 
    return x+3 

mogę później obiekty przechowują jako atrybuty funkcji, tak jak poniżej:

f.thing="hello!" 

bym lubię to zrobić z wnętrza kodu samej funkcji. Problem polega na tym, w jaki sposób uzyskać odwołanie do funkcji z wnętrza samej siebie?

+2

Dlaczego tego potrzebujesz? Co próbujesz zrobić? –

+1

zobacz także http://stackoverflow.com/questions/3109289/how-can-python-function-access-its-own-attributes – mykhal

Odpowiedz

19

W ten sam sposób, po prostu użyj jego nazwy.

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

@Roger: Cóż, tak właśnie pokazał mi mój tłumacz. – SurDin

+0

Byłem zdezorientowany przez formatowanie wyjściowe, ale rozpoznał kod i odpowiedź jest ciągła (+1). Tak właśnie pokazuje się "zwykły" Python REPL i powinien być bardziej rozpoznawalny dla większej liczby osób. Z jakiego tłumacza korzystałeś? –

3

Jeśli próbujesz zrobić memoization można użyć słownika jako parametr domyślnie:

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

Albo użyć Zamknięcie:

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) 

Trochę ładniejszy IMHO