了解Swig生成的Python fi

2024-03-29 15:50:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在我参与的一些工作中,我需要更好地理解用SWIG封装C++时生成的.pY文件的内容。这是在一个现有系统(我没有编写)的上下文中,该系统添加了一些自定义Python来处理模块中globals()的内容。在试图理解这一点时,我意识到我甚至不理解Swig生成的“正常”代码。你知道吗

假设,我们正在创建一个模块,MyModule,在这里我们封装一个C++函数^ {CD2>}。以下内容将出现在Swig生成的Python文件中我的模块.py地址:

def f():
    return _MyModule.f()
f = _MyModule.f

我的问题是:上面的前两行有什么意义?前两行添加到MyModule的globals()中的'f'条目立即被第三行覆盖,我认为这基本上等同于前面的def f()。你知道吗

我错过什么了吗?你知道吗


Tags: 模块文件函数代码py内容系统def
1条回答
网友
1楼 · 发布于 2024-03-29 15:50:05

你的分析是对的-你在第三行的作业完全隐藏了前两行。你知道吗

这在简单的情况下是正确的,但是有时它不会发生。以SWIG文件为例:

%module test

%pythonprepend %{
#hello world
%}

void foo();

在这里,foo()的python定义不像您的示例中那样隐藏,因为在生成的函数中有额外的python代码。(即使只是一个评论)。你知道吗

我认为定义总是被发出,而不是仅仅在需要的时候发出的原因可能是历史的,尽管我不能从快速查找中找到确切的例子。SWIG支持为许多不同版本的Python以许多不同的方式生成Python代码。(例如,请参阅-builtin生成的代码,或-python -help的输出,以了解变化的大小。因此,这些赋值可能是曾经在运行时测试中,当它被废弃时被删除,或者是来自遥远过去的宿醉。你知道吗

即使是在现代情况下,尽管在.py文件中可以看到方法的定义,但仍然有一个重要的好处,那就是IDE仍然可以做一些事情,比如计算参数、读取参数名称和文档字符串等。你知道吗

相关问题 更多 >