将非整数常量导入 .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
如何声明常量(各种类型 - 不仅仅是枚举值)并在多个 .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