调用find_zero函数时出现function参数重复赋值TypeError的解决方法
问题分析与解决方案
错误原因
你调用find_zero时出现的TypeError,是因为同一个参数function被重复赋值:
- 第一个位置参数
H被绑定到find_zero的function形参 - 同时又通过关键字参数
function=g再次给function赋值
Python不允许同一个参数既通过位置传递、又通过关键字传递重复赋值,因此触发错误。
修正方案
1. 重构find_zero函数逻辑
原函数没有将迭代过程中变化的d值传递给目标函数H,需要调整参数传递逻辑,明确区分固定参数和迭代变量:
def find_zero(target_func, eps, alpha, init_value, **fixed_vars): error = 1 k = 1 result = init_value while abs(error) > eps: # 将当前迭代的d值(result)与固定参数一起传入目标函数 error = target_func(d=result, **fixed_vars) result -= alpha / k * error k += 1 return result
改动说明:
- 新增
init_value参数,明确传入d的初始值,避免依赖全局变量 - 将原
**vars拆分为**fixed_vars,用于传递迭代过程中不变的参数(如r、size等) - 每次调用目标函数时,主动传入当前迭代的
d值
2. 修正调用代码
去掉重复的function参数传递,按新的函数签名传入参数:
for i in range(len(R)): d[i] = find_zero( H, eps, alpha, init_value=init_d, # 替换为你的d初始值变量 function=g, size=size, lower_bound=x0, upper_bound=xf, r=R[i] )
额外检查项
- 确保
f函数中的sqrt已正确导入(如import numpy as np后使用np.sqrt) - 确保
H函数依赖的V和K是已定义的全局变量,或可通过fixed_vars传递
内容的提问来源于stack exchange,提问作者lems
相关产品推荐
相关产品推荐

