Python TypeError:具有functools.partial的多个参数

时间:2018-07-29 19:40:40

标签: python function

使用partial库中的functools时遇到错误。

from functools import partial
def add(x,a,b):
    return x + 10*a + 100*b

add = partial(add, x=2, b=3)
print (add(4))

我得到了错误:

TypeError: add() got multiple values for argument 'x'

我知道可以通过将a移至add的第一个位置参数来解决此问题,例如:

def add(b,a,x):
    return x + 10*a + 100*b

add = partial(add, x=2, a=3)
print (add(4))

正确给出:432

我的问题是,是否可以在add函数中保持 x,a,b 完整的顺序并更改{{1 }}函数给出正确的结果。这很重要,因为在其他地方使用了partial函数之类的东西,因此对我来说,保持原始add函数中的顺序完整很重要。

我不想在print add之类的函数中使用关键字参数,因为我希望将其作为映射函数的输入 例如,我想做这样的事情:  (add(a = 4))  print (list(map(add,[1,2,3])))

1 个答案:

答案 0 :(得分:2)

解决问题的唯一方法是像这样使用关键字参数

print (add(b=4))

因为像这样print (add(4))那样使用它,所以将其分配给已经定义了部分参数的第一个参数,因此x被传递了两次

编辑

您还可以将局部参数与位置参数一起使用

像这样:

from functools import partial


def add(x, a, b):
    return x + 10 * a + 100 * b


add = partial(add, 2, 3)
print(add(4))

第二种解决方案是可能的,因为xa是前两个参数。当您不想从第一个参数开始定义连续参数时,可以使用带有关键字参数的方法。