2009-05-12 16 views
18
nun içine

bir işleve bir başvuru alma:Python: Ben bir işlev tanımlarsanız

def f(x): 
    return x+3 

elimden fonksiyonun özellikler olarak sonradan mağaza nesneler, şöyle:

f.thing="hello!" 

isterim Bunu işlevinin kodunun içinden yapmak gibi. Sorun şu ki, içten gelen işleve bir referans nasıl ulaşabilirim?

+2

Niçin buna ihtiyacın var? Ne yapmaya çalışıyorsun? –

+1

ayrıca bkz. Http://stackoverflow.com/questions/3109289/how-can-python-function-access-its-own-attributes – mykhal

cevap

19

Aynı şekilde, sadece adını kullanın. Eğer Memoization yapmaya çalışıyorsanız

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

@Roger: Pekala, yorumcumun gösterdiği yol buydu .. – SurDin

+0

Kafam karıştı çıkış biçimlendirmesiyle, ancak kodu tanıyıp yanıtı sağlam (+1). Bu, "olağan" Python REPL'nin gösterdiği ve daha fazla insan için daha iyi tanınabilmesi gereken şeydir. Hangi tercüman kullandınız? –

3

, varsayılan bir parametre olarak bir sözlük kullanabilirsiniz:

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

Veya bir kapatma kullanın:

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) 

Biraz daha güzel IMHO

İlgili konular