在.pyx文件中导入非整数常量

时间:2016-04-14 13:10:55

标签: cython

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

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

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

使用.pxd文件,我可以share C functionsshare types

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

1 个答案:

答案 0 :(得分:3)

您可以使用一个非常短的内联函数(lodash)来返回常量

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)强制执行constness,因此如果您尝试更改错误,则会在该阶段出现错误。这确实涉及创建一个额外的文件,所以我个人更喜欢内联函数方法。

编辑(2018):

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

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