【发布时间】:2019-10-26 04:23:18
【问题描述】:
如何将变量传递给 eval 函数?
我已经尝试过在 SO 上发布的一些解决方案以及通读 Python 文档
我有这部分代码“v”,我想在我的另一部分代码中重用它。这是一个sn-p:
v = lambda r5, cdate : somefunc(r4, cdate) + math.exp(-t_3m*r1 - t_6m*r2 - t_1y*r3 - t_2y*r4 - retfrac(d[4], d[5], cdate, eoffset = 730)*r5) + \
math.exp(-t_3m*r1 - t_6m*r2 - t_1y*r3 - t_2y*r4 - t_3y*r5)
然后我想为之类的东西做点什么:
w = "v(r5, cdate) + math.exp(-t_3m*r1 - t_6m*r2 - t_1y*r3 - t_2y*r4 - t_3y*r5)*(0"
# + some other expressions that I have to build up using a for loop since there is no closed form solution
func = lambda r6, cdate = i[30] : (five_year + (coupon_five_year/2)*(1-(ia_5y/.5))) - (coupon_five_year/2)*(eval(w)) - 100*math.exp(-t_3m*r1 - t_6m*r2 - t_1y*r3 - t_2y*r4 - t_3y*r5 - t_5y*r6)
r6 = fsolve(func, xguess)[0]
当我尝试对此进行评估时,我收到一条错误消息:
NameError: name 'v' is not defined
一旦我从 w 的表达式中删除 v,我就会得到一个 t_3m 的 NameError,它只是贯穿所有变量。有人可以帮帮我吗?
【问题讨论】:
-
v是一个函数,为什么不能直接传参数给它? -
我已经尝试将它直接移动到函数语句中,但是我仍然在 w 上得到一个名称错误。我相信“d”上的索引越界错误,但我已经验证 d 有近 20 个元素。
标签: python python-3.x python-2.7 scipy eval