Как быстро оценить Python код из строки? - PullRequest
0 голосов
/ 09 февраля 2020

Я пишу программу, которая должна выполнить код Python из строки миллионы раз. Есть ли более быстрый способ сделать это, чем использовать eval()? Выполнение кода в eval() занимает около 100 микросекунд, а запуск, встроенный в программу, занимает всего 8 микросекунд. Есть ли метод, похожий на eval(), который требует меньше времени для выполнения?

1 Ответ

1 голос
/ 09 февраля 2020

Я бы реструктурировал ваш код так, чтобы он не должен был eval ed (например, взять аргумент функции вместо строки)

Если уравнение обязательно должно быть из строки, вы может скомпилировать его заранее:

In [1]: x = y = 0

In [2]: %timeit eval('x ** 2 + y')
5.95 µs ± 223 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [3]: code = compile('x ** 2 + y', '<string>', 'eval')

In [4]: %timeit eval(code)
608 ns ± 9.88 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Вместо того, чтобы eval компилировать строку в байт-код при каждом ее вызове, compile делает это заранее.

...