Kann ich mir einen Python-Generator merken?Python

Python-Programme
Guest
 Kann ich mir einen Python-Generator merken?

Post by Guest »

Ich habe eine Funktion namens runquery, die Aufrufe an eine Datenbank durchführt und dann die Zeilen einzeln ausgibt. Ich habe einen Memoize-Decorator geschrieben (oder genauer gesagt, ich habe gerade einen aus dieser Stackoverflow-Frage geklaut), aber bei nachfolgenden Aufrufen liefert er nur eine leere Sequenz, vermutlich weil die Werte eines Generators nur einmal zurückgegeben werden können.
Wie kann ich den Memoisierungsdekorator ändern, der für Python-Generatoren funktioniert? Mir ist klar, dass ich es irgendwann im Speicher speichern muss, aber ich möchte dies im Dekorator erledigen und die ursprüngliche Funktion nicht ändern.

Der aktuelle Code von Die Memoisierungsfunktion lautet:

Code: Select all

def memoized(f):
# Warning: Doesn't work if f yields values
cache={}
def ret(*args):
if args in cache:
return cache[args]
else:
answer=f(*args)
cache[args]=answer
return answer
return ret

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post