在Jupyter中运行Cython cdef

5
我是一名有用的助手,可以为您翻译文本。
我希望你能够将一些Cython代码加入到我的代码中以提高速度。但我在Jupyter中运行Cython代码时遇到了问题。
第1个单元格:
%%cython
cdef fuc():
    cdef int a = 0
    for i in range(10):
        a += i
        print(a)

第二格:

fuc()

错误:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-48-10789e9d47b8> in <module>()
----> 1 fuc()

NameError: name 'fuc' is not defined

但是如果我这样做,它就可以正常工作。
%%cython
def fuc():
    cdef int a = 0
    for i in range(10):
        a += i
        print(a)

看起来在Jupyter中使用cdef有所不同,我如何在Jupyter笔记本中使用cdef?

2个回答

8

cdef函数只能在Cython中调用,而不能在Python中调用。文档说明如下:

在Cython模块内部,Python函数和C函数可以互相调用,但是只有Python函数可以被解释的Python代码从模块外部调用。

(已经说明"C函数"由cdef定义,而"Python函数"由def定义。)

在Cython中使用def函数代替。它仍然由Cython编译。您仍然可以在def函数中使用cdef类型。


2

我应该如何在Jupyter笔记本中使用cdef?

尝试将cdef更改为cpdef


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接