我正在使用Google Colab笔记本。我在同一笔记本中使用Cython编写了一个特定的,计算量大的代码。在这段代码中,我想调用一个函数(在同一笔记本的另一个单元格中用Python定义)。
现在,该功能已与我的其余纯Python代码高度集成,并且无法为Cython重写和重新定义功能。
我的问题是:如何从另一个在Cython中编译的单元中调用用Python编写的函数?
我已经看过的链接:使用cython从C调用带有python导入的python文件
通常,您会将整个功能放入模块中,然后将其导入%%cython
-cell中。
另一种不太干净的方法(但在笔记本的情况下可能可以接受)是从导入的__main__
,例如:
[1]: def foo():
print("I'm main foo")
接着:
[2]: %%cython
def usefoo():
from __main__ import foo
foo()
现在:
[3]: usefoo()
I'm main foo
另一个变体是foo
从__main__
略有不同的导入:
[2]: %%cython
from __main__ import foo
def usefoo2():
foo()
有两个主要区别:
foo
尚未定义__main__
,则第二个单元%%cython
将失败。如果foo
在调用函数期间未定义或不再定义第一个版本,它将失败usefoo
。foo
在中更改__main__
,则第一个版本将使用当前版本,而第二个版本将始终使用%%cython
-cell生成之时的版本(%%cython
由于缓存,它可能与-cell运行的时间不同)。这可能会令人困惑。从长远来看,这种方式非常令人困惑和困惑,因此在短暂的试用阶段之后,我将使用专用模块更改为更具可持续性的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句