Python的评估函数和传递参数?

时间:2019-06-11 17:26:44

标签: python python-3.x python-2.7 scipy eval

如何将变量传递给eval函数?

我已经尝试过在此处发布一些解决方案,以及阅读Python文档

我有这部分代码“ v”,我想在我代码的另一部分中重复使用。这是一个片段:

library(stringr)

input <- (c("the sum of $175,000,000 and the sum", "the sum of $20,000,000 and the sum", "the sum of $100,000,000 and the sum"))

df<-as.data.frame(input)

#extract the $, the digits and commas
#then remove the $ and commas
df %>% mutate(amount = str_remove_all(str_extract(input,"\\$[0-9,]+"), "[\\$,]"))

然后,我想对以下内容进行操作:

 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]

一旦我从w的表达式中删除v,我就会得到t_3m的NameError,它会遍历所有变量。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

eval函数接受两个附加参数,以为其提供全局和局部变量。

您只需要这样称呼它:eval(w,globals(),locals())

假设调用eval()时,在w字符串中进行的变量引用全部在范围内。