gpt4 book ai didi

python - 如何更改 Python 3 C 扩展中的函数参数值?

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:45 25 4
gpt4 key购买 nike

我不知道如何更改从 Python 传递到 C 的参数值。

PyArg_ParseTuple (args, "Os", &file_handle, &filename)

将让我以 PyObject * 的形式获取 file_handle。有没有办法改变 file_handle 代表的值?我知道我可以将多个值返回给 Python 函数调用,但这不是我在这种情况下想要做的。为了与 C API 保持一致,我制作了一个模块来表示。

最佳答案

您无法更改调用者的参数在调用者中引用的内容,您所能做的就是使用其 API 对对象本身执行突变。基本上,您收到了调用者指针的副本不是 C++ 风格的引用(也不是给您提供的 C 风格双指针访问在调用者中声明的指针),因此您不能在调用者中重新分配参数。

通常,您不想尝试在 Python API 中完美地重现 C API(我假设您的 C API 使用双指针来允许在调用者中重新分配值?) .这就是 PHP 的运行方式,它导致了非常不一致的 API,这些 API 通常没有利用高级语言的优势。

这种情况是双重的,因为当正确使用 with 语句时,类文件对象实际上有多个引用(不是 C++ 的意思),命名变量(传递给你的函数)和一个或多个隐藏在解释器中的引用(以确保 with 语句具有一致的 __exit__ 调用,即使调用者删除了他们自己的对象绑定(bind)).即使您可以以某种方式重新分配调用者的参数,with 语句仍会引用原始文件对象,并且调用者不会很明显地知道他们需要close(隐式使用 with 或显式调用 close)再次返回结果,因为您的函数替换了它们的对象。

返回多个结果(Py_BuildValue makes this easy),调用者可以根据需要替换它们的值。

关于python - 如何更改 Python 3 C 扩展中的函数参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48797834/

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