在 Google Colab 笔记本中从 Cython 代码调用 Python 函数
Calling Python function from Cython code, inside a Google Colab notebook
我在 Google Colab 笔记本上工作。我正在同一个笔记本中使用 Cython 执行一段特殊的计算密集型代码。在这段代码中,我想调用一个函数(在同一笔记本的另一个单元格中定义,在 Python 中)。
现在,该函数已与我的其他纯 Python 代码高度集成,并且无法为 Cython 重写和重新定义内容。
我的问题是:如何从另一个用 Cython 编译的单元调用用 Python 编写的函数?
Link 我已经看过了:
Call python file with python imports from C using cython
通常,您会将整个功能放入一个模块中,然后将其导入 %%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 构建时的版本(这由于缓存,%%cython
-cell 可能与 运行 不同)。这可能会让人很困惑。
在漫长的运行中,这种方式相当混乱和令人费解,所以在短暂的试用阶段后,我将改为使用专用模块的更可持续的方法。
我在 Google Colab 笔记本上工作。我正在同一个笔记本中使用 Cython 执行一段特殊的计算密集型代码。在这段代码中,我想调用一个函数(在同一笔记本的另一个单元格中定义,在 Python 中)。
现在,该函数已与我的其他纯 Python 代码高度集成,并且无法为 Cython 重写和重新定义内容。
我的问题是:如何从另一个用 Cython 编译的单元调用用 Python 编写的函数?
Link 我已经看过了: Call python file with python imports from C using cython
通常,您会将整个功能放入一个模块中,然后将其导入 %%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
在__main__
中更改,第一个版本将使用当前版本,而第二个版本将始终使用%%cython
-cell 构建时的版本(这由于缓存,%%cython
-cell 可能与 运行 不同)。这可能会让人很困惑。
foo
,则第一个版本将失败
在漫长的运行中,这种方式相当混乱和令人费解,所以在短暂的试用阶段后,我将改为使用专用模块的更可持续的方法。