在 pythoncode 块中使用模块定义的常量
Use module defined constants in pythoncode block
我的 C 代码定义了一个常量,我正在尝试添加使用该常量的 python 代码(在 pythoncode
块中),由于某些原因,这不起作用。
演示.i
文件:
%module test
%{
// c code defines a static constant
static const int i=3;
%}
// declare the constant so that it shows up in the python module
static const int i;
%pythoncode %{
# try to use the constant in some python code
lookup={'i':i,}
%}
这是错误:
[dave]$ python -c "import test"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "test.py", line 70, in <module>
lookup={'i':i,}
NameError: name 'i' is not defined
如果我在 pythoncode
块中注释掉 lookup
字典,一切正常:
[dave]$ python -c "import test; print test.i"
3
所以至少当我导入模块时常量出现了。
如何在我的 pythoncode
块中 "see" C 定义的常量?
痛饮 2.0.4,python2.7.
Adding additional Python code 表示 %pythoncode
:
This code gets inserted in to the .py
file created by SWIG.
所以让我们跟踪生成的 test.py
:
# try to use the constant in some python code
lookup={'i':i,}
# This file is compatible with both classic and new-style classes.
cvar = _test.cvar
i = cvar.i
在定义 i
之前插入了 %pythoncode
。由于这是第一次也是唯一一次出现,您可能需要直接使用 _test.cvar.i
来代替:
%pythoncode %{
# try to use the constant in some python code
lookup={'i': _test.cvar.i,}
%}
另一种解决方法是使用函数将引用变量推迟到模块完成加载之后:
%pythoncode %{
def lookup( key ){
mp={'i':i}
return mp[key]
%}
我的 C 代码定义了一个常量,我正在尝试添加使用该常量的 python 代码(在 pythoncode
块中),由于某些原因,这不起作用。
演示.i
文件:
%module test
%{
// c code defines a static constant
static const int i=3;
%}
// declare the constant so that it shows up in the python module
static const int i;
%pythoncode %{
# try to use the constant in some python code
lookup={'i':i,}
%}
这是错误:
[dave]$ python -c "import test"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "test.py", line 70, in <module>
lookup={'i':i,}
NameError: name 'i' is not defined
如果我在 pythoncode
块中注释掉 lookup
字典,一切正常:
[dave]$ python -c "import test; print test.i"
3
所以至少当我导入模块时常量出现了。
如何在我的 pythoncode
块中 "see" C 定义的常量?
痛饮 2.0.4,python2.7.
Adding additional Python code 表示 %pythoncode
:
This code gets inserted in to the
.py
file created by SWIG.
所以让我们跟踪生成的 test.py
:
# try to use the constant in some python code
lookup={'i':i,}
# This file is compatible with both classic and new-style classes.
cvar = _test.cvar
i = cvar.i
在定义 i
之前插入了 %pythoncode
。由于这是第一次也是唯一一次出现,您可能需要直接使用 _test.cvar.i
来代替:
%pythoncode %{
# try to use the constant in some python code
lookup={'i': _test.cvar.i,}
%}
另一种解决方法是使用函数将引用变量推迟到模块完成加载之后:
%pythoncode %{
def lookup( key ){
mp={'i':i}
return mp[key]
%}