2014-02-09 40 views
0

我必須創建一個函數mega_calculator,它需要兩個輸入:一個函數和次數,我應該重複一遍。當我調用它時,該函數應該返回一個值。在父函數(mega_calculator)內部,現在我必須創建第二個函數,它在創建它時通過爲參數*args提供與父函數mega_calculator相同數量的輸入。我的問題是,如何訪問第二個函數內的父函數參數?如何從父函數訪問* args輸入?

我認爲*args是一個參數列表,因此如果我調用第一個和第二個值,我可以保存函數操作並將數量重複到變量上,以便稍後在第二個函數中使用,但這不起作用。

我應該怎麼做?任何幫助都會被大大的愛和欣賞。我們必須有奇怪的功能設置,所以不幸的是,我不能僅僅做一個簡單的while循環。

def mega_calculator(fn, repeat = 1000): 
     def helper(*args): 
      function = *args[0] 
      bob = *args[1] 
      while bob > 0: 
       total += function 
       return (total/repeat) 
     return helper() 

` 

回答

5

你誤會了; args捕獲傳遞給helper()的任何參數(未明確指定),但不會將任何參數傳遞給該函數。

你反而直接調用它,沒有任何參數。

但是,您不需要在這裏傳遞參數,因爲fnrepeat可以通過閉包直接訪問。

最有可能的作業要求你回報helper並呼籲fn使用這些參數:

def mega_calculator(fn, repeat=1000): 
    def helper(*args): 
     total = 0 
     for _ in range(repeat): 
      total += fn(*args) 
     return total/repeat 
    return helper 

現在mega_calculator()返回一個新的函數對象,即調用時,通過對給fn當任何參數它調用該函數。

小演示:

>>> def mega_calculator(fn, repeat=1000): 
...  def helper(*args): 
...   total = 0 
...   for _ in range(repeat): 
...    total += fn(*args) 
...   return total/repeat 
...  return helper 
... 
>>> def add(a, b): 
...  return a + b 
... 
>>> repeated = mega_calculator(add, 10) 
>>> repeated(5, 6) 
11 

add()函數被調用10次,但由於助手也分歧相加結果通過重複的次數,它仍然是返回11。

+0

非常感謝你,它的工作!可悲的是,我們嘗試了單獨的部分,但我想我們必須將所有這些變化集中在一起。一旦時間到了,我會選擇這個解決方案 – user1476390