2009-05-12 8 views
18

Si je définis une fonction:Python: obtenir une référence à une fonction à l'intérieur de lui-même

def f(x): 
    return x+3 

je peux plus tard stocker des objets comme des attributs de la fonction, comme ceci:

f.thing="hello!" 

Je voudrais aime faire cela à l'intérieur du code de la fonction elle-même. Le problème est, comment puis-je obtenir une référence à la fonction de l'intérieur de lui-même?

+2

Pourquoi avez-vous besoin de cela? Qu'essayez-vous de faire? –

+1

voir aussi http://stackoverflow.com/questions/3109289/how-can-python-function-access-its-own-attributes~~V~~singular~~3rd – mykhal

Répondre

19

De la même façon, il suffit d'utiliser son nom.

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

@Roger: Eh bien, ce fut la façon dont mon interprète a montré .. – SurDin

+0

J'étais confus par le format de sortie, mais reconnu le code et la réponse est solide (+1). C'est ce que montre le "habituel" Python REPL, et devrait être plus reconnaissable pour plus de gens. Quel interprète avez-vous utilisé? –

3

Si vous tentez de le faire memoization, vous pouvez utiliser un dictionnaire comme paramètre par défaut:

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

Ou utiliser une fermeture:

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) 

Un peu plus agréable à mon humble avis

Questions connexes