gpt4 book ai didi

python - 如何包含另一个文件中的 cython 代码

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:53 25 4
gpt4 key购买 nike

我想包含一个文件中的代码以在另一个文件中使用,就像导入模块一样,但我不想为此编译第一个文件。

我的项目管道看起来像这样:

文件 A 定义了一个扩展类型对象,如下所示:

cdef class Thing(object):
...

这种文件会有许多不同的版本,每个版本都定义一个名为“Thing”的类。

文件 B 使用类“Thing”执行所有类型的简洁操作,但不在文件 B 中定义它,因为文件 B 能够对文件 A 中定义的许多不同类型的称为“thing”的对象执行一般操作。

例如

cdef int do_cool_stuff(Thing a, Thing b):
...

基本上。我可以将文件 B 中的代码复制粘贴到每个文件 A 中,一切都会正常工作。但我想更好地组织我的项目,这两种类型的文件执行非常不同的任务,我希望混合和匹配这些任务。

有什么建议吗?

此外,如果能够做这样的事情那就太好了:

在文件A中:

ctypedef ... newtype

在文件 B 中:

cdef newtype...

如果有帮助的话,新类型将与 double 类型非常相似,但可能携带更多信息。我将重载比较运算符 <、>、== 等,但我希望 newtype 能够比 double 携带更多信息。

编辑:我会添加更多信息,因为似乎大多数读者都觉得这个问题比实际情况更微不足道。

我有几个非常长的程序,并且这些文件都可以分为两个不同的部分,每个部分的后半部分在代码上都是相同的,但它们都使用第一部分中定义的类型。第二部分不能独立存在,因为它依赖于第一部分中的 ctypedef 语句。

所以我想要的是这样的:文件1:

cdef class Thing:...

文件2:

stuff(Thing one, Thing two)

文件3:

import file1
import file2

并编译文件3,文件1和2未编译。

如果我制作 file1 和 file2 .pxd 文件并使用 cimport,我会收到关于不允许 def 语句并且所有 cdef 语句必须内联的提示。如果我将 import 与 .py 文件一起使用,编译器会提示 file1 不是 cimported 模块。

为什么 cython 坚持要求我的头文件以比主文件更严格的方式格式化?我本质上想避免将 file2 复制粘贴到我的主文件中,最好编写一次并导入它,但我似乎找不到任何可以帮助我完成此操作的文档。

最佳答案

正如 DavidW 在评论中提到的,我可能正在寻找的是

include "filename.pxi"

命令。这表明计划草率。最佳编码实践是创建 .pxd 和 .pyx 文件来扩充主 .pyx 文件。

关于python - 如何包含另一个文件中的 cython 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47762772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com