В моем коде я использую eval
для оценки строкового выражения, заданного пользователем. Есть ли способ скомпилировать или иным образом ускорить это утверждение?
import math
import random
result_count = 100000
expression = "math.sin(v['x']) * v['y']"
variable = dict()
variable['x'] = [random.random() for _ in xrange(result_count)]
variable['y'] = [random.random() for _ in xrange(result_count)]
# optimize anything below this line
result = [0] * result_count
print 'Evaluating %d instances of the given expression:' % result_count
print expression
v = dict()
for index in xrange(result_count):
for name in variable.keys():
v[name] = variable[name][index]
result[index] = eval(expression) # <-- option ONE
#result[index] = math.sin(v['x']) * v['y'] # <-- option TWO
Для быстрой опции сравнения ONE занимает 2,019 секунды на моей машине, а опция TWO занимает всего 0,218 секунды. Конечно, у Python есть способ сделать это без жесткого кодирования выражения.