Python saving an eval function
eval, python, python-2.7
Solution
You could `eval` the `lambda`, so you just evaluate it once, and after that it's a function that you can use:
s = "1 / x ** 2 + y"
s = "lambda x,y: "+s
f = eval(s)
x = 2
y = 3
print(f(x,y))
I get `3.25`, but I can change `x` and `y` as many times I need without evaluating the expression again.
Problem
Say I have a function `fun(f, x, y)` where x and y are numbers and f is a string specifying a function such as `"1 / x ** 2 + y"`. I wish to use this function `f` a lot, say a few million times, and the values of `x` and `y` change between each use. Therefore calling `eval(f)` takes a significant amount of time as opposed to just calculating the value of the function each time. (About 50x, in my measured case.) Is there any way to save this function `f` so that I would only have to call `eval` once? PS. Please do not discuss the (un)safety of using `eval` here, I am aware of it, but this code isn't going anywhere where a 3rd party will run it, nor is it relevant to my question.