麻烦使用eval()和cython

时间:2010-04-06 23:51:11

标签: python cython

我试图加速一些代码,然后我尝试使用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

返回:

NameError:未定义名称“a”。

感谢所有帮助。

3 个答案:

答案 0 :(得分:7)

这是因为eval无法检查环境以查找a。使用locals函数将环境传递给它。

def thefirst(a):
    return eval('1+2+a', locals())

答案 1 :(得分:3)

你可以逃脱cython.inline:

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

但是,在这种情况下,请密切关注Python运行时的内存使用情况。编译和加载的每个不同表达式占用一些内存。如果你这么做的话可能会加起来。

答案 2 :(得分:-1)

嗯,我认为在任何情况下,eval对于表现来说都是相当糟糕的。你的实际用例是什么?