編寫函數make_monitored將輸入函數f作爲輸入,該函數本身需要一個輸入。 make_monitored返回的結果是第三個函數,比如說mf,通過維護一個內部計數器來跟蹤它被調用的次數。監視和計數另一個函數的函數Python
如果mf的輸入是特殊字符串「how-many-calls?」,那麼mf返回 計數器的值。
如果輸入是特殊字符串「reset-count」,則mf將計數器 重置爲零。對於任何其他輸入,mf返回在該輸入上調用f的結果,並增加計數器。
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
這裏是我不明白: 我想打一個元素列表,以作爲內部計數器。我不明白爲什麼他們說沒有定義make_monitored是父函數,我已經定義了一個。
這是另一個問題,我已經完成以前(和正確),使用類似的方法,但成功。
累加器是一個函數,用一個數字參數 重複調用,並將其參數累加到一個和中。每次調用它時,它將返回當前累計總和的 。編寫一個函數make_accumulator,生成累加器,每個累加器保持一個獨立的總和。
def make_accumulator():
lst=[0]
def add(x):
lst[0]+=x
return lst[0]
return add
A=make_accumulator()
樣品執行:
A = make_accumulator()
A(10)輸出:10
A(10)輸出:20
我不知道爲什麼這裏定義lst [0]被定義。 唯一可能的原因是,make_accumulator發生在沒有任何參數,但 make_monitored確實需要在1
感謝,設法解決它使用Python 3.6 – Silver