Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自字符串名称的Python CFFI枚举_Python_Enums_Python Cffi - Fatal编程技术网

来自字符串名称的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

我在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()
>>> 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
>>>