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

pic*_*olo 7 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))
Run Code Online (Sandbox Code Playgroud)

我收到错误:

TypeError: add() got multiple values for argument 'x'
Run Code Online (Sandbox Code Playgroud)

我知道可以通过提出a第一个位置参数来解决这个问题add

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

add = partial(add, x=2, a=3)
print (add(4))
Run Code Online (Sandbox Code Playgroud)

正确给出:432

我的问题是是否有一种方法可以在函数内保持x,a,b顺序不变,并改变函数以给出正确的结果。这很重要,因为类似函数的东西在其他地方使用,所以对我来说保持原始函数中的顺序完整很重要。addpartialaddadd

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

mra*_*777 5

解决问题的唯一方法是在该函数中使用关键字参数,如下所示

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))
Run Code Online (Sandbox Code Playgroud)

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