2017-07-12 86 views
1

我很困惑,爲什麼這個錯誤發生:當嘗試使用** kwargs函數調用函數時出現TypeError?

TypeError: func1() takes exactly 0 arguments (1 given)

的代碼如下:

def func1(**kwargs): 
    if kwargs['dog'] != 2: 
     return False 
    return True 

def func2(**kwargs): 
    if kwargs['cat'] != 3: 
     return False 
    return True 

def func3(*listOfFuncs, **extraArgs): 
    for func in listOfFuncs: 
     if func(extraArgs) == False: 
      print 'break' 
      break 
     print 'continue' 
     continue 

func3(func1, func2, dog=2, cat=1) 

我試圖通過函數名作爲參數傳遞給FUNC3。當我們在fun3中調用func1和func2時,我還想將'cat'和'dog'關鍵字參數傳遞給func1和func2,但是在每個函數中只使用一個關鍵字參數?

任何幫助,將不勝感激

+0

你張貼不可能匹配到代碼中的錯誤,沒有'testy'任何地方 –

+1

對不起。我重寫了代碼,以便更容易閱讀堆棧溢出,但忘記更新錯誤消息。它已被糾正。 – Nicholas

+1

如果您對我的解決方案感到滿意,那麼請將答案標記爲有用(Upvote),這對其他用戶也有幫助。這樣我們可以管理堆棧溢出的好習慣。 –

回答

2

你必須在函數調用的時候通過** kwargs ARGS。

我剛剛查看了您的代碼。請嘗試以下

def func1(**kwargs): 
    if kwargs['dog'] != 2: 
     return False 
    return True 

def func2(**kwargs): 
    if kwargs['cat'] != 3: 
     return False 
    return True 

def func3(*listOfFuncs, **extraArgs): 
    print 
    for func in listOfFuncs: 
     if func(**extraArgs) == False: 
      print 'break' 
      break 
     print 'continue' 
     continue 

func3(func1, func2, dog=2, cat=1) 

輸出:

continue 
break 
+0

謝謝你。真的很難解決它! – Nicholas

+0

這是我的榮幸。我總是樂於提供幫助。 –

相關問題