Kann ich mir einen Python-Generator merken?
Posted: 04 Jan 2025, 05:54
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:
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