在 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()

主要有两个区别:

  1. 如果 foo 未(尚未)在 __main__ 中定义,第二个 %%cython-cell 将失败。如果在调用函数 usefoo.
  2. 期间未定义或不再定义 foo,则第一个版本将失败
  3. 如果 foo__main__ 中更改,第一个版本将使用当前版本,而第二个版本将始终使用 %%cython-cell 构建时的版本(这由于缓存,%%cython-cell 可能与 运行 不同)。这可能会让人很困惑。

在漫长的运行中,这种方式相当混乱和令人费解,所以在短暂的试用阶段后,我将改为使用专用模块的更可持续的方法。