为何向字典引用的函数传元组时报错:缺少必需位置参数
问题分析与解决
错误原因
核心问题是参数传递方式错误:
执行dict_func[k](dict_arg[k]+v)时,合并后的元组(df_data_instr, 1)是作为单个参数传递给instr_date函数的,而非将元组内的两个元素分别作为独立参数传入。
函数instr_date需要两个位置参数:df_data和num,但此时它只收到了一个参数(即包含两个元素的元组),因此抛出missing 1 required positional argument: 'num'的错误。
元组内容一致但行为不同的原因
手动调用dict_func[k](df_data,1)时,是直接传递两个独立的位置参数;而代码中传递的是一个元组对象——尽管元组内容和手动传参的参数列表完全对应,但传递逻辑完全不同:
- 手动调用:函数接收
df_data作为第一个参数,1作为第二个参数 - 代码调用:函数接收
(df_data,1)这个元组作为第一个参数,没有第二个参数传入
这就是元组内容相等,但传参行为完全不同的本质原因。
解决方法
使用Python的元组解包操作符*,将合并后的元组内的元素拆解为独立的位置参数传递:
dict_data = {} for k,v in dict_col_func.items() : dict_data[k] = dict_func[k](*(dict_arg[k] + v))
这里的*(dict_arg[k]+v)会把元组(df_data_instr,1)拆解成两个独立参数,和你手动调用的传参逻辑完全一致。
内容的提问来源于stack exchange,提问作者gilhop
相关产品推荐
相关产品推荐

