2017-06-16 42 views
0

我有這樣使用** kwargs的正確方法是什麼?

class myClass(): 
    def filter(self, inplace = False, **kwargs): 
     for key, value in kwargs.items(): 
      if isinstance(value, str): 
       value = "'%s'" % value 
      query_str += " & %s == %s" % (str(key), str(value)) 

myObject.filter(param1 = value1, inplace = False) 

當我運行它,我得到一個錯誤信息類:

pandas.computation.ops.UndefinedVariableError: name 'param1' is not defined

我真的不明白,因爲你用**kwargs的原因是爲了更靈活的參數,對吧?

+1

會發生什麼事,當你運行這個命令:myObject.filter(就地=假,參數1 =值) –

+0

的可能的複製https://stackoverflow.com/questions/36901/what-does-double-star-和星級做的參數 – Ding

+1

可能重複[什麼\ * \ *(雙星)和\ *(星)做參數?](https://stackoverflow.com/questions/36901/what-沒有雙星和星級做的參數) – Ding

回答

-1

inplace是一個位置參數,必須在關鍵字參數之前出現。嘗試

myObject.filter(False, param1 = value1) 
+0

這完全不是一個位置參數。在用戶定義的函數中,參數列表中指定的任何參數都可以通過關鍵字傳遞,如果通過,則順序無關緊要。 –

相關問題