0
我使用從functools模塊的部分的方法的功能的範圍內的值的映射:functools.partial:類型錯誤:得到多個值關鍵字參數
def basic_rule(p,b,vx=1,**kwargs):
return (p/b) if vx != 0 else 0
def rule5(func,**kwargs):
vals = map(functools.partial(func,**kwargs), range(1,kwargs['b']+1))
return [x for i,x in enumerate(vals[:-1]) if x >= vals[i+1]] == []
rule5(basic_rule,p=100,b=10000)
這裏是我得到線錯誤5:
----> return map(functools.partial(func,**kwargs), range(1,kwargs['b']+1))
TypeError: basic_rule() got multiple values for keyword argument 'p'
看起來functools.partial試圖分配範圍的參數p,即使我已經賦值給它。我試圖將範圍分配給vx的值。任何想法我可以做到這一點?
編輯:添加了一點額外的上下文的代碼。基本上我想測試5做的是確保給它的函數的結果隨着vt的增加而增加,以便`func(vt = 1)< func(vt = 2)... < func(vt = N)。
basic_rule中** kwargs的用途是什麼? –
爲什麼使用'functools.partial()'而不是lambda? –
如果vx!= 0 else 0'變爲'kwargs [「p」]/kwargs [「b」]並且'basic_rule(vx = 1,** kwargs):'的函數簽名會避免錯誤但不確定你的最終目標是什麼 –