Если я определю функцию:
def f(x): return x+3
Позже я могу сохранить объекты как атрибуты функции, например:
f.thing="hello!"
Я хотел бы сделать это из кода самой функции. Проблема в том, как мне получить ссылку на функцию изнутри самой себя?
Точно так же, просто используйте его имя.
>>> def g(x): ... g.r = 4 ... >>> g <function g at 0x0100AD68> >>> g(3) >>> g.r 4
Или используйте закрытие:
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)
Немного приятнее ИМХО
Если вы пытаетесь сделать памятку, вы можете использовать словарь в качестве параметра по умолчанию:
def f(x, memo={}): if x not in memo: memo[x] = x + 3 return memo[x]