gpt4 book ai didi

python - 理解 Swig 生成的 Python 文件

转载 作者:行者123 更新时间:2023-12-01 08:02:09 24 4
gpt4 key购买 nike

在我目前参与的一些工作过程中,我需要更好地理解使用 Swig 包装 C++ 时生成的 .py 文件的内容。这是在现有系统(我没有编写)的上下文中,该系统添加了一些自定义 Python 来操作 globals() 的内容。在模块中。在试图理解这一点时,我意识到我什至不理解“正常”Swig 生成的代码。

例如,假设我们正在创建一个模块 MyModule,并在其中包装一个 C++ 函数 void f() 。 Swig 生成的 Python 文件 MyModule.py 中将出现以下内容:

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

我的问题是:上面的前两行有什么意义?添加到 MyModule 的 globals() 的“f”条目前两行立即被第三行覆盖,我相信这本质上相当于前面的 def f() .

我错过了什么吗?

最佳答案

您的分析是正确的 - 您显示的第三行的作业完全隐藏了前两行。

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

%module test

%pythonprepend %{
#hello world
%}

void foo();

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

我认为定义总是被发出,而不是只在需要时发出的原因可能是历史性的,尽管我无法通过快速查找找到确切的示例。 SWIG 支持以多种不同的方式为许多不同版本的 Python 生成 Python 代码。 (例如,请参阅 -builtin 生成的代码或 -python -help 的输出,以了解变化的幅度。因此,这些分配可能曾经是在运行时测试中,当它被废弃和/或它是遥远过去的遗留物时被删除。

即使在现代情况下,虽然在 .py 文件中可见方法的定义仍然有一个实质性的好处,那就是 IDE 可以执行诸如计算参数、读取参数名称和文档字符串等操作。仍然。

关于python - 理解 Swig 生成的 Python 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55686300/

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