2017-07-10 8 views
0

Ich schrieb einen einfachen Dekorator, um Werte zwischenzuspeichern, falls ein Funktionsaufruf '' zurückgeben würde. Gibt es eine bessere Möglichkeit, den Wert zu speichern als das Wörterbuch, das ich gerade verwende? Würde hasattr mehr Python sein und wenn ja, wie zu implementieren? Wäre noch etwas besser?Wert zwischen Funktionsaufrufen speichern

def cache(func): 
# Caching decorator 
# if result is '', return saved value 
# else save and return result 

    saved = {1:''} 
    @wraps(func) 
    def newfunc(*args, **kwargs): 
     result = func(*args, **kwargs) 
     if result: 
      saved[1] = result 
      return result 
     return saved[1] 
    return newfunc 
+1

Ich würde es nicht mehr pythonic, sondern nur ein dict von Attributen zu und von Ihrer Funktion übergeben ? –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Ich verstehe Ihren Kommentar nicht. Bitte umformulieren. – foosion

+0

'{'var1': val1, 'var2: val2}' Lassen Sie Ihre Funktion dies akzeptieren, verwenden Sie diese und geben Sie diese dann zurück. –

Antwort

2

das Ergebnis als ein Attribut der ursprünglichen Funktion Speichern scheint ein bisschen mehr pythonic:

def cache(func): 
    func._result = '' 
    @wraps(func) 
    def newfunc(*args, **kwargs): 
     result = func(*args, **kwargs) 
     if result: 
      func._result = result    
     return func._result 
    return newfunc 
+0

Es scheint sich pythonal zu bewegen – foosion

Verwandte Themen