我收到了一些看起来像这样的代码:
在“header.hpp”中:
enum class my_enum_type {
val1 = 0;
...
}
在“header_lib.pyx”中:
cdef extern from "header.hpp":
enum my_enum_type:
val1 = 0;
...
...
稍后在“header_lib.pyx”中:
def foo():
...
return my_enum_type.val1
我被告知这应该没有问题,但根据我刚才的经验,情况并非如此,并且在这篇文章中很明显:Defining enums in Cython code that will be used in the C part of code .
但是,如果我写“return val1”,它也不会自己识别“val1”。执行此操作的正确方法是什么?
最佳答案
您可以在 Cython 中声明一个 enum
为:
ctypedef enum options: OPT1, OPT2, OPT3
或
ctypedef enum options:
OPT1,
OPT2,
OPT3
并且示例可以是:
def main():
cdef options test
test = OPT2
f(test)
cdef void f(options inp):
if inp == OPT1:
print('OPT1')
elif inp == OPT2:
print('OPT2')
elif inp == OPT3:
print('OPT3')
运行 main()
时,您将看到 "OPT2"
被打印出来。您可以将变量 test
传递给 C
或 C++
函数,方法与此处显示的 cdef
相同功能。
关于python - 如何在 cython 中按值访问枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23304237/