为什么我不能在 Jupyterlab 的 Cython 中使用 int 参数?

Why can I not use int parameter in Cython in Jupyterlab?

我正在尝试在 Jupyterlab 中使用 Cython:

%load_ext Cython
%%cython -a
    
def add (int x, int y):
    cdef int result
    result = x + y
    return result
add(3,67)

错误:

File "<ipython-input-1-e496e2665826>", line 9
    def add (int x, int y):
                 ^
SyntaxError: invalid syntax

我错过了什么?

add 必须用 cdef 定义,而不是 def.

cdef add (int x, int y):
    cdef int result
    result = x + y
    return result
add(3,67)

更新:

我刚刚测量了 cpdef vs def,分数之间的差异非常低(45(cpdef)对 52(def),较小 = better/faster),因此对于您的函数来说,只调用几次可能无关紧要,但通过大量数据进行咀嚼可能会产生一些真正的不同。

如果这对您不适用,只需在单独的单元格中调用 %load_ext,保留 def 就足够了。

(Cython 0.29.24,GCC 9.3.0,x86_64)


使用 cpdef to make it C-like function, but also to expose it to Python, so you can call it from Jupyter (because Jupyter is using Python, unless specified by the %%cython magic func). Also, check the Early Binding for Speed 部分。

cpdef add (int x, int y):
    cdef int result
    result = x + y
    return result

还要确保检查评论中提到的 Using the Jupyter notebook which explains that the % needs to be in a separate cell as ead