Python 保存一个 eval 函数

Python saving an eval function

假设我有一个函数 fun(f, x, y),其中 x 和 y 是数字,f 是指定函数的字符串,例如 "1 / x ** 2 + y".

我希望经常使用此功能f,说几百万次,并且 xy 的值在每次使用之间发生变化。
因此调用 eval(f) 与每次只计算函数值相比需要花费大量时间。 (在我测量的情况下,大约是 50 倍。)

有什么方法可以保存这个函数 f 以便我只需要调用 eval 一次吗?

PS. 请不要在这里讨论使用 eval 的(不)安全性,我知道,但这段代码不是不会去任何第 3 方 运行 它的地方,也与我的问题无关。

您可以 eval lambda,因此您只需对其求值一次,然后它就是您可以使用的函数:

s = "1 / x ** 2 + y"

s = "lambda x,y: "+s
f = eval(s)
x = 2
y = 3
print(f(x,y))

我得到 3.25,但我可以根据需要多次更改 xy,而无需再次计算表达式。

如果Jean_Francois'的解决方案还是不够快,你可以看看numba。 f_numba = jit(f),然后可能还@jit 调用 f_numba 的函数,以便 f_numba 内联到调用者中。取决于您的应用程序。