如何快速评估字符串中的 Python 代码?

How do I evaluate Python code from a string quickly?

我正在编写一个程序,该程序必须从字符串中执行 Python 代码数百万次。有没有比使用 eval() 更快的方法来做到这一点? 运行eval()中的代码大约需要100微秒,而运行嵌入程序中的代码只需要8微秒。有没有类似eval()的方法,执行时间更短?

我会重组您的代码,这样它就不必 evaled(例如,采用函数参数而不是字符串)

如果方程绝对必须来自字符串,你可以预先编译它:

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 提前完成。