需要帮助以了解Cython-查找示例但不起作用

时间:2019-04-14 12:24:45

标签: python cython

我在理解Cython和pxd时遇到问题。我在互联网上找到了此代码,但是无法正常工作。你能解释一下为什么吗?

我编译时的错误:

  

警告:test.pyx:1:0:用def方法覆盖cdef方法。

     

test.pxd:6:14:C方法'foo'已声明但未定义

我在这里找到此示例:https://cython.readthedocs.io/en/latest/src/tutorial/pure.html

我在编译时出错了吗?

compile.py:

import os
import sysconfig

from distutils.core import setup
from Cython.Build import cythonize

fichier = "test.pyx"

setup(
    ext_modules = cythonize(fichier)
)

test.pyx:

def myfunction(x, y=2):
    a = x - y
    return a + x * y

def _helper(a):
    return a + 1

class A:
    def __init__(self, b=0):
        self.a = 3
        self.b = b

    def foo(self, x):
        print(x + _helper(1.0))

test.pxd:

cpdef int myfunction(int x, int y=*)
cdef double _helper(double a)

cdef class A:
    cdef public int a, b
    cpdef foo(self, double x)

1 个答案:

答案 0 :(得分:1)

这与文件名有关。 .pyx个文件被视为Cython文件处理(即它们必须与.pxd个文件匹配)。但是.py文件被解释为“纯Python模式”(因为它们也必须在Python中工作)。

如果将.pyx文件重命名为.py,它将起作用。


在您链接到的文档中对此进行了明确说明:

  

.pyx文件中的声明必须与同名.pxd文件中的声明完全一致(并且任何矛盾都会导致编译时错误,请参阅pxd文件),. py文件中的无类型定义可以是用.pxd

中存在的更具体的类型覆盖并扩展为静态类型