python - **kwargs 没有将变量传递给函数,怎么了?

标签 python

<分区>

出于某种原因,我无法让接收函数看到在 Python 中传入 **kwargs 的变量。 (已解决 - 请参阅编辑)。这说明了问题 - **kwargs 参数通过几个函数传递并使其成为 integrand 函数。我在那里放了一个 print(kwargs) ,它显示了我在下面的前几行中创建的整个字典。但是 integrand 函数看不到这些变量,它会出错。使最终函数可以访问这些变量的正确方法是什么?非常感谢,在 SO 上搜索了很多帖子,但找不到与我的案例直接相关的内容。

def integrand(x, F, K, T1, T2, vol, flag):
    print(kwargs)
    d1 = (np.log(x / (x+K)) + 0.5 * (vol**2) * (T2-T1)) / (vol * np.sqrt(T2 - T1))
    d2 = d1 - vol*np.sqrt(T2 - T1)
    mu = np.log(F) - 0.5 *vol**2 * T1
    sigma = vol * np.sqrt(T1)
    value = lognorm.pdf(x, scale=np.exp(mu), s=sigma) * (flag * x*norm.cdf(flag * d1) - flag * (x+K)*norm.cdf(flag * d2))
    return value

def integrate(x, w, a, **kwargs): 
    return np.sum(w*transform_integral_negative1_1_to_0_1(x, a, **kwargs))

def transform_integral_0_1_to_Infinity(x, a, **kwargs): 
    return integrand(a+(x/(1-x)), **kwargs) *(1/(1-x)**2); 

def transform_integral_negative1_1_to_0_1(x, a, **kwargs): 
    return 0.5 * transform_integral_0_1_to_Infinity((x+1)/2, a, **kwargs)

flag = current_opt[i,0]
F = current_opt[i,1]
K = current_opt[i,2]   
T2 = current_opt[i,3]
T1 = current_opt[i,4]
r = current_opt[i,5]
vol = current_opt[i,6]

a = 0
b = np.Inf
kwargs = {'flag':flag, 'F':F, 'K':K, 'vol':vol, 'T2':T2, 'T1':T1}
integrate(x, w, a, **kwargs)

这是在出错之前打印的内容 print(kwargs):

{'F': 1.2075, 'flag': -1.0, 'K': 0.12509999999999999, 'T2': 0.068500000000000005, 'vol': 0.42999999999999999, 'T1': 0.041099999999999998}

尽管上面定义了 K,但错误是:

NameError: name 'K' is not defined

解决方案是定义每个输入而不是从字典中提取每个值...传递给最后一个函数的 **kwargs 自动提取所有关键字参数。

最佳答案

**kwargs 作为 dict 传递给函数,它不会自动填充函数的局部变量。

例如:

kwargs = {'K': 1}

def foo(**kwargs):
    print(K)

def bar(**kwargs):
    print(kwargs['K'])

foo(**kwargs)  # NameError
bar(**kwargs)  # Works Ok.

关于python - **kwargs 没有将变量传递给函数,怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37550809/

相关文章:

python - 如何在散点图上映射鼠标位置?

python - Joblib 持久化和 Pandas

python - 有没有更好的方法来在 python 中找到带循环的未知数?

python http服务器,多个同时请求

python - 什么时候触发写入磁盘?

python - self.request.form 不可迭代?

python - 如何运行已安装的python脚本?

python - 在Python3中分析和计算列表列表中的新值

python - 使用 Python selenium 通过 xpath 查找兄弟节点

python - 将 SQL 结果从自连接转换为方形 pandas 数据框