在python中评估函数时浮动错误?

时间:2017-06-18 19:17:07

标签: python excel

所以我试图从Excel工作表中调用值以在python中的函数中使用。我希望代码将代码中定义的变量乘以一个单元格中的值,然后再添加另一个单元格中的另一个值。我正在使用解析器来定义表达式。这就是我写的:

    beam_energy = 12
    import parser
    for a in range(1,4):
        formula = "energy_vs_stopping_power_functions.cell(a,1).value*x"
        energy = parser.expr(formula).compile()
        x = beam_energy
        print eval(energy) + energy_vs_stopping_power_functions.cell(a,2).value

这段精确的代码在几分钟之前就可以正常使用,并且给了我正确的值,但无论出于何种原因,它现在只返回"TypeError: 'float' object is not callable."我不知道出了什么问题,特别是因为字面意思确切代码刚刚起作用。

有没有更简单的方法来评估python中的线性函数?

1 个答案:

答案 0 :(得分:0)

首先 - 评估线性函数的更简单方法:

def make_linear_fn(a, b):
    def linear_fn(x):
        return a * x + b
    return linear_fn

energy = linear_fn(-200., 1800.)

energy(5)    # returns 800.0 (== -200.0 * 5 + 1800.0)

第二:这个

for a in range(1,4):
    formula = "energy_vs_stopping_power_functions.cell(a,1).value*x"
    energy = parser.expr(formula).compile()
    x = beam_energy
    print eval(energy)

可以简化为

for a in range(1, 4):    # produces 1, 2, 3
    print(evspf.cell(a, 1).value * beam_energy)