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.
literal_eval may be a safer alternative. literal_eval() would only evaluate literals, not algebraic expressions.
Answer: eval is a built-in- function used in python, eval function parses the expression argument and evaluates it as a python expression. In simple words, the eval function evaluates the “String” like a python expression and returns the result as an integer.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With