gpt4 book ai didi

python - 在 Python 中使用其名称(Python 字符串)获取枚举中的 C 变量值

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:30 30 4
gpt4 key购买 nike

基本上,我在 Python 中包装了一个 C API(使用 CFFI(这很棒))。

我在那个 C API 中有一个枚举:

typedef enum
{
enum1 = value1;
enum2 = value2;
...
} enumSomething;

在 Python 中,我收到该枚举中的一个变量的名称,作为一个字符串:"enum1"。我想要获取 value1

使用 CFFI,您可以包装枚举并轻松访问其成员 (here is an example)。我的问题是我有代表变量名称的字符串,而不是变量本身。

因此,cwrapper.c."enum1" 将不起作用(cwrapper 是包装模块的名称,c 是名称包装库时由 ffi.dlopen(libname) 返回)。

我可以创建一个字典,将变量名称作为字符串映射到实际变量,例如:

enum = { "enum1" : cwrapper.c.enum1, "enum2" : cwrapper.c.enum2, ... } 

但在这一点上,我最好将枚举重写为 Python 字典。

我知道我也可以使用正则表达式来读取 C 文件,但我认为还有更好的方法来处理它,我还没有想到。有什么想法吗?

最佳答案

cwrapper.c."enum1" 通常在 Python 中不是有效语法。您需要使用 getattr:

>>> getattr(cwrapper.c, "enum1")
42

然而,更简洁的方法是使用 typeof 获取实际类型;然后得到它的relements,这是一个字典!

>>> import cffi
>>> ffi = cffi.FFI()
>>> ffi.cdef('typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;')
>>> typeof_strategy = ffi.typeof('strategy')
>>> typeof_strategy.relements
{'RANDOM': 0, 'SEARCH': 2, 'IMMEDIATE': 1}
>>> typeof_strategy.relements['SEARCH']
2

关于python - 在 Python 中使用其名称(Python 字符串)获取枚举中的 C 变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37190986/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com