我想在文件中包含代码以便在另一个文件中使用,就像导入模块一样,但我不想编译第一个文件。
我的项目管道看起来像这样:
文件A定义了一个扩展类型对象:
cdef class Thing(object):
...
这种文件会有很多不同版本,每一个都定义一个名为" Thing"的类。
文件B使用类" Thing"来完成所有类型的整洁东西。但是没有在文件B中定义它,因为文件B能够对称为" thing"的许多不同类型的对象执行一般操作。在文件A中定义。
e.g。
cdef int do_cool_stuff(Thing a, Thing b):
...
基本上。我可以将文件B中的代码复制粘贴到每个文件A中,它们都能正常工作。但我想更好地组织我的项目,这两种类型的文件执行非常不同的任务,我希望混合和匹配这些任务。
有什么建议吗?
此外,能够做到这样的事情会很好:
文件A中的:
ctypedef ... newtype
并在文件B中:
cdef newtype...
如果有帮助,newtype将非常类似于double,但可能会包含更多信息。我将重载比较运算符<,>,==等,但我希望newtype携带的信息多于double。
编辑:我会添加更多信息,因为似乎大多数读者认为这个问题比现在更简单。
我有几个非常长的程序,文件可以全部分成两个不同的部分,每个部分的后半部分在代码方面是相同的,但它们都使用第一部分中定义的类型。第二部分不能独立存在,因为它取决于第一部分中的ctypedef语句。
所以我想要的是: 文件1:
cdef class Thing:...
file2:
stuff(Thing one, Thing two)
file3的:
import file1
import file2
并编译file3,文件1和2未编译。
如果我制作file1和file2 .pxd文件并使用cimport,我会收到关于def
语句不允许的投诉,并且必须内联所有cdef
语句。如果我使用带有.py文件的import,编译器会抱怨file1
不是一个cimported模块。
为什么cython坚持认为我的头文件的格式比我的主文件更加严格?我本质上想避免将file2复制粘贴到我的主文件中,编写一次并导入它会很好,但我似乎无法找到任何可以帮助我完成此操作的文档。
答案 0 :(得分:1)
正如DavidW在评论中提到的,我可能正在寻找的是
include "filename.pxi"
命令。这表明了草率的规划。最好的编码实践是创建.pxd和.pyx文件来扩充主.pyx文件。