开发者

Trouble using eval() with cython

I was trying to speed up some code, and then I tried compiling a class and a function using cython

and WOW! I havn't measured it yet but it looks at least 10x faster.

I first looked at cython just two days ago, I'm very impressed!

However, I can't get eval() to work.

def thefirst(int a):
    d = eval('1+2+a')
    return d

I compile this to module1.pyd file and call it with the python file:

from module1 import thefirst
x = thefirst开发者_JAVA技巧(2)
print x

This returns:

NameError: name 'a' is not defined.

All help is appreciated.


This is because eval has no way of examining the environment to find a. Use the locals function to pass it the environment.

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


You may get away with cython.inline:

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

However, keep an eye on your Python runtime's memory usage in this case. Each distinct expression that gets compiled and loaded takes up some memory. This may add up if you do this a lot.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜