Python3.4 ** kwargs,意外的关键字参数

时间:2016-07-11 03:39:52

标签: python function dictionary kwargs

我有一个函数字典,所有函数都使用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是一个意外的关键字。

*我按照建议编辑了我的帖子以包含我的实际极简主义代码。

2 个答案:

答案 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