【问题标题】:Import non-integer constant in .pyx file在 .pyx 文件中导入非整数常量
【发布时间】:2018-08-02 01:40:22
【问题描述】:

如何声明常量(各种类型 - 不仅仅是枚举值)并在多个 .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 文件?

【问题讨论】:

    标签: cython


    【解决方案1】:

    您可以使用一个非常短的内联函数 (in the pxd file),它只返回常量

    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
    

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 1970-01-01
      • 2021-12-14
      • 2011-11-22
      • 2015-05-18
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      相关资源
      最近更新 更多