Schreiben Sie eine Funktion make_monitored, die als Eingabe eine Funktion, f, nimmt, die selbst einen Eingang nimmt. Das Ergebnis, das von make_monitored zurückgegeben wird, ist eine dritte Funktion, zum Beispiel mf, die die Anzahl der Aufrufe durch einen internen Zähler verfolgt.Funktion zum Überwachen und Zählen einer anderen Funktion Python
Wenn die Eingabe für mf die spezielle Zeichenfolge "how-many-calls?" Ist, gibt mf den Wert des Zählers zurück. Wenn der Eingang der spezielle String "reset-count" ist, setzt mf den Zähler auf Null zurück. Für jede andere Eingabe gibt mf das Ergebnis von f an diesem Eingang zurück und erhöht den Zähler.
def make_monitored(f):
a=[0]
def mf(x):
if x=="how-many-calls?":
return a[0]
elif x=="reset-count":
a=[0]
else:
a[0]+=1
return f(x)
return mf
def double(x): #NOT TO BE CHANGED , provided by question
return 2 * x
d = make_monitored(double) #NOT TO BE CHANGED, provided by question
hier ist, was ich nicht verstehe: ich ein Element Liste zu machen als einen internen Zähler machen wollen. Ich verstehe nicht, warum sie sagen, dass a nicht definiert ist, wenn make_monitored die Elternfunktion ist und ich a definiert habe.
Dies ist eine andere Frage, die ich zuvor (und richtig) abgeschlossen habe, die eine ähnliche Methode verwendet, aber erfolgreich ist.
Ein Akkumulator ist eine Funktion, die wiederholt mit einem einzelnen numerischen Argument aufgerufen wird und ihre Argumente in eine Summe akkumuliert. Jedes Mal, wenn es aufgerufen wird, gibt es die aktuell akkumulierte Summe zurück. Schreiben Sie eine Funktion make_accumulator, die Akkumulatoren generiert, die jeweils eine unabhängige Summe beibehalten.
def make_accumulator():
lst=[0]
def add(x):
lst[0]+=x
return lst[0]
return add
A=make_accumulator()
Beispiel Ausführung:
A = make_accumulator()
A (10) Ausgabe: 10
A (10) Ausgang: 20
ich nicht, warum lst [0] wird hier akzeptiert. Der einzig mögliche Grund ist, dass make_accumulator in keine Parameter aber make_monitored nimmt in 1.
dank gelang es – Silver