来自字符串名称的Python CFFI枚举
我在Python cffi中定义了一个枚举。如何按名称实例化它,但不是如何创造它来自字符串名称的Python CFFI枚举,python,enums,python-cffi,Python,Enums,Python Cffi,我在Python cffi中定义了一个枚举。如何按名称实例化它,但不是如何创造它 ffibuilder=FFI() cdef('typedef enum{densite,sparse}维度_mode;') dim=ffibuilder.new('dimension\u mode','sparse') #E类型错误:应为指针或数组ctype,获得“维度\模式” 您需要调用dlopen('c')将枚举加载到c-namespace中 >>> from cffi import FFI
ffibuilder=FFI()
cdef('typedef enum{densite,sparse}维度_mode;')
dim=ffibuilder.new('dimension\u mode','sparse')
#E类型错误:应为指针或数组ctype,获得“维度\模式”
您需要调用dlopen('c')
将枚举加载到c-namespace中
>>> from cffi import FFI
>>> ffibuilder = FFI()
>>> ffibuilder.cdef('typedef enum { dense, sparse } dimension_mode;')
>>> dim = ffibuilder.new('dimension_mode', 'sparse')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/anaconda3/lib/python3.6/site-packages/cffi/api.py", line 258, in new
return self._backend.newp(cdecl, init)
TypeError: expected a pointer or array ctype, got 'dimension_mode'
现在,访问/分配枚举值:
>>> c.dense
0
>>> c.sparse
1
>>>
发件人:
您可以使用library对象调用前面的函数
由ffi.cdef()声明,用于读取常量以及读取或写入全局
变量。请注意,可以使用单个cdef()来声明函数
从多个库中,只要使用
dlopen()并从正确的函数访问函数
libpath是共享库的文件名,它可以包含
是否为完整路径(在这种情况下,将在标准
位置,如man dlopen中所述),带或不带扩展。
或者,如果libpath为None,则返回标准C库
(可用于访问Linux上glibc的功能)
奇怪的是,您可以使用
FFI
对象对cdef
s进行如此多的操作,但不是这个。
>>> c.dense
0
>>> c.sparse
1
>>>