使用Cython时出现eval()问题

4

我试图优化一些代码,然后尝试使用cython编译类和函数

哇!虽然我还没有测量过它的速度,但至少看起来快了10倍。

我两天前才第一次接触cython,非常印象深刻!

但是,我无法让eval()函数正常工作。

def thefirst(int a):
    d = eval('1+2+a')
    return d

我将其编译为module1.pyd文件,并通过python文件调用它:
from module1 import thefirst
x = thefirst(2)
print x

这会返回:
名称错误:名称'a'未定义。
非常感谢您的帮助。
2个回答

7
这是因为eval无法检查环境以找到a。使用locals函数将其传递给环境即可。
def thefirst(a):
    return eval('1+2+a', locals())

4

你可以使用cython.inline来实现:

http://wiki.cython.org/enhancements/inline

但在这种情况下,请注意Python运行时的内存使用情况。每个被编译和加载的不同表达式都会占用一些内存。如果你经常这样做,这可能会累加。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接