开发者

Trouble using eval() with cython

开发者 https://www.devze.com 2022-12-25 16:44 出处:网络
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 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

精彩评论

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