将非整数常量导入 .pyx 文件

Import non-integer constant in .pyx file

如何声明常量(各种类型 - 不仅仅是枚举值)并在多个 .pyx 文件之间共享它们?

.pyx 文件中,我可以声明和使用常量:

DEF FavouriteFood = "spam"
DEF ArraySize = 42
print(FavouriteFood)
print(ArraySize)

并且使用 .pxd 文件,我可以 share C functions or share types

但是我怎样才能共享常量呢?文档指示 very limited way of doing this with anonymous enums,但其中的值只能是整数。例如,如何将常量字符串或浮点数导入 .pyx 文件?

您可以使用非常短的内联函数 (in the pxd file),它只是 returns 常量

cdef inline const char* GetFavouriteFood():
    return "spam"

cdef inline float GetHowMuch():
    return 4.5

另一种选择是在头文件中定义 C 中的常量,然后(在您的 pxd 中)执行

cdef extern from "myconstants.h":
   const char* FavouriteFood
   float HowMuch

C 编译器(而不是 Cython)强制执行常量,因此如果您尝试更改它们,将在那个阶段出现错误。这确实涉及创建一个额外的文件,所以我个人更喜欢内联函数方法。


编辑 (2018):

您现在可以直接在 Cython 中包含 C 代码,这使得第二种方法更容易:

cdef extern from *:
   """const char* FavouriteFood = "spam";
   const float HowMuch = 4.5;"""
   const char* FavouriteFood
   float HowMuch