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

这将返回:

NameError:名称“a”未定义。

感谢所有帮助。

4

2 回答 2

7

这是因为eval无法查看环境来发现a。使用该locals函数将其传递给环境。

def thefirst(a):
    return eval('1+2+a', locals())
于 2010-04-07T00:00:28.157 回答
4

您可能会摆脱 cython.inline:

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

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

于 2011-04-16T14:09:39.603 回答