【问题标题】:Calling Python function from Cython code, inside a Google Colab notebook在 Google Colab 笔记本中从 Cython 代码调用 Python 函数
【发布时间】:2020-12-18 22:33:58
【问题描述】:
【问题讨论】:
标签:
python
function
cython
【解决方案1】:
通常,您会将整个功能放入一个模块中,然后将其导入%%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
另一种变体是从 __main__ 导入 foo 略有不同:
[2]: %%cython
from __main__ import foo
def usefoo2():
foo()
有两个主要区别:
- 如果
foo (尚未)在__main__ 中定义,第二个%%cython-cell 将失败。如果在调用函数 usefoo 期间未定义或不再定义 foo,则第一个版本将失败。
- 如果
foo 在__main__ 中更改,第一个版本将使用当前版本,而第二个版本将始终使用从%%cython-cell 构建的那一刻起的版本(这可能与@ 987654337@-cell 由于缓存而运行)。这可能会让人很困惑。
从长远来看,这种方式非常令人困惑和令人费解,因此在短暂的试用阶段后,我会改用使用专用模块的更可持续的方法。