使用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])))
答案 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))
第二种解决方案是可能的,因为x
和a
是前两个参数。当您不想从第一个参数开始定义连续参数时,可以使用带有关键字参数的方法。