On 10/05/2015 10:58, Steven D'Aprano wrote:
from timeit import Timer

def func():
     a = 2
     b = 3
     c = 4
     return (a+b)*(a-b)/(a*c + b*c)


code = func.__code__
assert func() == eval(code)

t1 = Timer("eval; func()", setup="from __main__ import func")
t2 = Timer("eval(code)", setup="from __main__ import code")

# Best of 10 trials.
print (min(t1.repeat(repeat=10)))
print (min(t2.repeat(repeat=10)))

Maybe the overheads of using eval() are significant when calling a simple function such as your example.

When I made it do a bit more work:

def func():
    a = 2
    b = 3
    c = 4
    for i in range(50):
        x=(a+b)*(a-b)/(a*c + b*c)
    return (a+b)*(a-b)/(a*c + b*c)

Then the eval() call took only 3% longer rather than 100%.

--
Bartc


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to