我试图加速一些代码,然后我尝试使用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”。
感谢所有帮助。
答案 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)