You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用functools.partial调用出现参数多值错误原因咨询

Python functools.partial参数重复赋值错误原因解析

首先明确两个Python基础规则:

  • Python函数调用时,位置参数会按照形参定义的顺序依次匹配,关键字参数会直接匹配对应名称的形参,同一个形参不能被多次赋值
  • functools.partial 绑定的参数,会在调用新的可调用对象时,优先和用户传入的参数合并后再传递给原函数

第一段代码正常运行的原因

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

add_part = partial(add, c = 2, b = 1)
add_part(3)
# 输出结果为312

这里用关键字参数固定了b和c的值,调用add_part(3)时只传入了1个位置参数,会按顺序匹配第一个未被固定的形参a,最终三个参数值为a=3、b=1、c=2,没有重复赋值,所以运行正常。


第二段代码报错的原因

def foo(x, y, z):
   return x+y+z

bar = partial(foo, y=3)

bar(1, 2)

这里用关键字参数固定了y=3,但调用bar(1,2)时传入了2个位置参数:

  1. 第一个位置参数1正常匹配第一个形参x
  2. 第二个位置参数2会按顺序匹配第二个形参y

此时y已经被partial绑定了值3,又被位置参数赋值为2,同一个参数出现了两个值,所以触发got multiple values for argument 'y'的报错。


修复方案

如果要保留y=3的绑定,调用时可以明确指定第二个传入值是给z的:

bar(1, z=2)
# 输出结果为6

或者在partial绑定时用位置参数固定前序的参数,避免位置匹配冲突:

# 固定第一个参数x=3
bar = partial(foo, 3)
bar(1,2)
# 输出结果为6

内容的提问来源于stack exchange,提问作者Igor Rivin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:36:04