【发布时间】:2011-05-08 19:02:16
【问题描述】:
我可以从内联 C 代码(使用 weave)调用 python 函数吗?
动机: 我有一些我想优化的代码,并且我已经确定了一个函数的瓶颈。在我惯用的技巧之后,我通常会转向scipy.weave.inline 进行优化。不幸的是,在这种情况下,我的函数正在内部循环中调用另一个 python 函数。我已经确定内部函数不会导致速度问题,而且我真的不想用 C 来编写它。
小例子:
from weave import inline
def foo(x):
return x*2
def bar():
a = 0
for i in xrange(10):
a += foo(i)
return a
def bar_weave():
code = """
int a = 0;
for (int i=0;i<10;++i){
a += foo(i); //<<-- what I'd like to do, but doesn't work
}
return_val = a;"""
return inline(code,['foo'])
print bar()
print bar_weave()
【问题讨论】:
-
那是你真正的 foo 函数吗?
-
不,这只是结构的一个例子。我实际的 foo 函数足够复杂,用 C 语言编写它也会很痛苦,尤其是因为它不是我的瓶颈。
-
foo 调用了什么,调用了多少次?
标签: python performance inline scipy