故障使用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())
嗯,我认为eval在任何情况下对性能都会相当差。你的实际用例是什么?
该程序生成随机表达式,然后选择其中的健身等于给定的表达式。 (遗传编程)所以我有像“(2 /((3 *(x + 4)-5)/ 6))”这样的表达式,有时候是100到150个词。 Eval()在那里非常方便。但我是一名初学者,我可以从任何建议中学习。 – 2010-04-07 00:15:07
嗯,我想我应该发布这个答案作为评论...哦,现在太晚了:-( – SamB 2015-08-10 17:00:01
你可以逃脱cython.inline:
http://wiki.cython.org/enhancements/inline
然而,留意在这种情况下你的Python运行时的内存使用情况。每个编译和加载的独特表达式都会占用一些内存。如果你这么做的话,这可能会加起来。
这样做的窍门,谢谢 – 2010-04-07 00:06:26