2009-05-12 15 views
18

Si defino una función:Python: obtener una referencia a una función desde dentro de la propia

def f(x): 
    return x+3 

que más últimos objetos del almacén como atributos de la función, así:

f.thing="hello!" 

lo haría me gusta hacer esto desde dentro del código de la función en sí. El problema es, ¿cómo obtengo una referencia de la función desde adentro?

+2

¿Por qué necesitas esto? ¿Que estás tratando de hacer? –

+1

ver también http://stackoverflow.com/questions/3109289/how-can-python-function-access-its-own-attributes – mykhal

Respuesta

19

De la misma manera, solo use su nombre.

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

@Roger: Bueno, así fue como mi intérprete lo mostró ... – SurDin

+0

Estaba confundido por el formato de salida, pero reconoció el código y la respuesta es sólida (+1). Esto es lo que muestra el REPL "habitual" de Python, y debería ser más reconocible para más personas. ¿Qué intérprete usaste? –

3

Si usted está tratando de hacer memoization, se puede utilizar un diccionario como un parámetro por defecto:

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

O utilizar un cierre:

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) 

Algo más bonito en mi humilde opinión

Cuestiones relacionadas