在Cython中使用eval()时遇到问题

4 投票
2 回答
1260 浏览
提问于 2025-04-15 21:18

我在尝试加速一些代码的时候,试着用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: name 'a' is not defined.

任何帮助都非常感谢。

2 个回答

4

你可以试试使用 cython.inline,这样做可能会有效:

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

不过,要注意你运行 Python 程序时的内存使用情况。每次编译和加载不同的表达式都会占用一些内存。如果你频繁这样做,内存使用可能会增加很多。

7

这是因为 eval 没有办法查看环境来找到 a。你可以使用 locals 函数来把环境传给它。

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

撰写回答