在Cython中使用eval()时遇到问题
我在尝试加速一些代码的时候,试着用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: name 'a' is not defined.
任何帮助都非常感谢。
2 个回答
4
你可以试试使用 cython.inline,这样做可能会有效:
http://wiki.cython.org/enhancements/inline
不过,要注意你运行 Python 程序时的内存使用情况。每次编译和加载不同的表达式都会占用一些内存。如果你频繁这样做,内存使用可能会增加很多。
7
这是因为 eval
没有办法查看环境来找到 a
。你可以使用 locals
函数来把环境传给它。
def thefirst(a):
return eval('1+2+a', locals())