使用cython .pxd 文件增强纯Python文件

6 投票
1 回答
2936 浏览
提问于 2025-04-16 04:56

根据这里的例子,"增强 .pxd 文件",我想用 ".pxd" 文件来增强一个纯 Python 文件。(也就是在纯 Python 文件外部添加类型定义)。

这是我的 Python 文件:

class A(object):
    def foo(self, i=3, x=None):
        print "Big" if i > 1000 else "Small"

这是我的 pxd 文件:

cdef class A:
    cpdef foo(self, int i, x)

我有一个字典,默认值设为 "None" 在 Python 中。可惜的是,Cython 不喜欢这样。

如果我使用我的“纯” Python 文件,而不声明类型,或者在 pxd 文件中将类型声明为 "dict",我会遇到这个错误:

"签名与之前的声明不兼容"

我发现如果我不指定默认值,它是可以编译的,但我有理由要声明默认值。

有没有办法解决这个问题呢?

1 个回答

14

在cpdef函数中,选填参数的声明方式和cdef函数不一样,实际上这和Python函数的写法是相同的。

你的.pxd文件需要修改成以下的写法:

cdef class A:
    cpdef foo(self, int i=*, x=*)

撰写回答