我在理解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)
答案 0 :(得分:1)
这与文件名有关。 .pyx
个文件被视为Cython文件处理(即它们必须与.pxd
个文件匹配)。但是.py
文件被解释为“纯Python模式”(因为它们也必须在Python中工作)。
如果将.pyx
文件重命名为.py
,它将起作用。
在您链接到的文档中对此进行了明确说明:
.pyx文件中的声明必须与同名.pxd文件中的声明完全一致(并且任何矛盾都会导致编译时错误,请参阅pxd文件),. py文件中的无类型定义可以是用.pxd
中存在的更具体的类型覆盖并扩展为静态类型