functools.partial想要使用位置参数作为关键字参数

usu*_* me 26 python partial-application

所以我想了解partial:

import functools

def f(x,y) :
    print x+y

g0 = functools.partial( f, 3 )
g0(1)

4 # Works as expected
Run Code Online (Sandbox Code Playgroud)

在:

g1 = functools.partial( f, y=3 )
g1(1)

4 # Works as expected
Run Code Online (Sandbox Code Playgroud)

在:

g2 = functools.partial( f, x=3 )
g2(1)

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

TypeError如果我y用作关键字参数,则消失:

在:

g2( y=1 )

4
Run Code Online (Sandbox Code Playgroud)

是什么导致的TypeError

Mar*_*ers 34

这与functools.partial真的无关.你本质上是这样调用你的函数:

f(1, x=3)
Run Code Online (Sandbox Code Playgroud)

Python首先完成位置参数,你的第一个参数是x.然后应用关键字参数,并再次提供x.

functools.partial()没有办法检测到你已经提供了第一个位置参数作为关键字参数.它不会通过用y=关键字参数替换位置参数来扩充您的调用.

混合位置和关键字参数时,必须注意不要两次使用相同的参数.