【问题标题】:cython: how to declare a cdef function that has no returncython:如何声明一个没有返回的 cdef 函数
【发布时间】:2015-11-21 14:23:59
【问题描述】:

当我声明一个返回双精度的 cdef 函数时,我会写 cdef double method_name(...)。如果它没有返回某些东西,而我只是将其省略为 cdef method_name(...) 然后 cython --annotate 将其标记为黄色。如何声明方法/函数不返回任何内容?

cdef void method_name(...) 因分段错误而崩溃

cdef None method_name(...) -> 'None' is not a type identifier

【问题讨论】:

  • 你能提供一个 MCVE (stackoverflow.com/help/mcve) 和你得到的确切错误吗?哦,可能还有你的 cython 版本,以防万一。
  • 谢谢:这是 Cython 0.22 版中的一个错误问题。更新到 0.23.4 解决了它。

标签: cython


【解决方案1】:

--annotate 将其标记为黄色,因为如果您省略返回类型注释 (Cython Language Basics),cython 假定返回类型为 python 对象。

将 void 指定为返回类型对我有用。很多官方的例子中也用到了它,只要确保不要返回任何东西。

【讨论】:

    【解决方案2】:

    对我来说(cython 0.21.1)用void 定义 c 函数有效:

    # mymod.pyx file
    
    cdef void mycfunc(int* a):
        a[0] = 2
    
    def myfunc():
        cdef int a = 1
        mycfunc(&a)
        print(a)
    

    注释的html文件中c函数不是黄色的和

    python -c 'from mymod import myfunc; myfunc()'
    

    按预期打印2

    【讨论】:

      【解决方案3】:

      Cython 0.22 版中的一个错误。更新到 0.23.4 解决了它。

      【讨论】:

        猜你喜欢
        • 2018-05-15
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-04
        • 2010-11-30
        相关资源
        最近更新 更多