我有一个函数字典,所有函数都使用1或2个可选参数。我想迭代这个字典并将两个参数传递给每个迭代函数,并且具有只需要1个参数的函数来忽略第二个。但是,在这些情况下,我收到意外的关键字参数错误。
def getNumFrames(self, **kwargs):
return len(self.x)
def getConcentration(self, **kwargs):
if ((not gradient) or (not maxX)):
return 0
return (gradient / maxX) * self.x[0]
fields = {'numFrames': getNumFrames, 'concentration': getConcentration}
for field, fieldFunction in fields.items():
for track in tracks:
fieldFunction(object, maxX = 10, gradient = 2)
在此示例中,getConcentration可以使用,但getFrames会说maxX是一个意外的关键字。
*我按照建议编辑了我的帖子以包含我的实际极简主义代码。
答案 0 :(得分:1)
避免所有这些麻烦的更好方法是使用以下范例:
def func(obj, **kwargs):
return obj + kwargs.get(a, 0) + kwargs.get(b,0)
这利用了kwargs
是由传递的参数及其值组成的字典,get()
执行查找并在密钥不存在时返回默认值的事实。
始终通过字典kwargs
访问您的命名参数。这使您的生活更加简单。
答案 1 :(得分:-1)
我会通过创建一个类似下面的函数来实现这一点,第二个参数是可选的。
func (obj, a = 0, b = 0):
return obj + a + b