故障使用eval()与用Cython

故障使用eval()与用Cython

问题描述:

我试图加快一些代码,然后我试图编译一个类和函数使用用Cython故障使用eval()与用Cython

和WOW!我还没有测量它,但它看起来至少快了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' 没有定义。

所有帮助表示赞赏。

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

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

这样做的窍门,谢谢 – 2010-04-07 00:06:26

嗯,我认为eval在任何情况下对性能都会相当差。你的实际用例是什么?

+0

该程序生成随机表达式,然后选择其中的健身等于给定的表达式。 (遗传编程)所以我有像“(2 /((3 *(x + 4)-5)/ 6))”这样的表达式,有时候是100到150个词。 Eval()在那里非常方便。但我是一名初学者,我可以从任何建议中学习。 – 2010-04-07 00:15:07

+0

嗯,我想我应该发布这个答案作为评论...哦,现在太晚了:-( – SamB 2015-08-10 17:00:01

你可以逃脱cython.inline:

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

然而,留意在这种情况下你的Python运行时的内存使用情况。每个编译和加载的独特表达式都会占用一些内存。如果你这么做的话,这可能会加起来。