gpt4 book ai didi

python - SWIG/python - C 中定义的常量不可访问

转载 作者:行者123 更新时间:2023-12-01 03:33:18 26 4
gpt4 key购买 nike

我正在使用 Swig 3.0.7 创建 Python 2.7 可调用版本的 C 函数,这些函数以这种方式定义常量:

#define MYCONST 5.0

在 swig 的早期版本中,Python 可以透明地使用这些内容:

import mymodule

x = 3. * mymodule.MYCONST

但是现在这会生成一条消息

AttributeError: 'module' object has no attribute 'MYCONST'

“mymodule”中使用常量内部的函数按预期工作。

有趣的是,如果我在 Swig 指令文件 mymodule.i 中包含这一行,

#define MYCONST 5.0

然后执行 dir(mymodule) 返回一个包含的列表

['MYCONST_swigconstant', 'SWIG_PyInstanceMethodNew',  (etc.) .... ]

输入Python解释器

 mymodule.MYCONST_swigconstant

给出

<built-in function MYCONST_swigconstant>

没有提供明显的方法来获取该值。

所以我的问题是,能否使之前的语法起作用,以便 mymodule.MYCONST 正确评估

如果不行,有解决办法吗?

最佳答案

定义不会通过 cvar 导出到 SWIG。您可以执行以下操作

#define MYCONST 5.0
const float gMYCONST = MYCONST;

通过这种方式,您可以将类型信息添加到常量中,并且可以通过以下方式访问它

import mymodule
mymodule.cvar.gMYCONST

我有 SWIG 3.0.2,使用这个版本,可以使用 mymodule.MYCONST 访问定义,但由于其他原因,我通常将宏定义转换为类型化定义。

关于python - SWIG/python - C 中定义的常量不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40634826/

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