Функция Python Eval и передача аргументов? - PullRequest
0 голосов
/ 11 июня 2019

Как передать переменные в функцию eval?

Я попробовал некоторые решения, размещенные здесь на SO, а также прочитал документацию по Python

У меня есть этот раздел кода 'v', который я хотел бы использовать в другой части моего кода. Вот фрагмент кода:

 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

Как только я удаляю v из выражения для w, я получаю NameError для t_3m, и он просто пропускает все переменные. Может ли кто-нибудь помочь мне?

1 Ответ

1 голос
/ 11 июня 2019

Функция eval принимает два дополнительных параметра для предоставления ей глобальных и локальных переменных.

Вам просто нужно вызвать ее так: eval(w,globals(),locals())

Это предполагает, что ссылки на переменные сделаны ввсе строки w находятся в области видимости при вызове eval ().

...