Python C API 在不构建元组的情况下返回多个值/对象

标签 python c

我遇到了以下问题。我已经编写了一个 C-Extension to Python(2.7/3.2) 来连接一个自写的软件库。不幸的是,我需要从最后一个可选的函数返回两个值。在 Python 中我尝试过

def func(x,y): 
    return x+y, x-y

test = func(13,4)    

但是 test 是一个元组。如果我写

test1,test2 = func(13,4)    

我将两个值分开了。是否有可能在不拆包元组的情况下仅返回一个值,即第二个(,..第三,..第四)值被忽略?

如果存在这样的解决方案,它如何寻找 C-API?因为

return Py_BuildValue("ii",x+y,x-y); 

也会产生一个元组。

最佳答案

这个问题对C API 没有什么特别的;这和 Python 端的行为一致。

从函数返回的元组可以

  • 解包,如果它的长度是常量:a, _ = f()
  • 在 3.x 中,被解包,即使它的长度不是常量:a, *_ = f()
  • 被迭代,但这在这里没有用
  • 被索引:a = f()[0]

关于Python C API 在不构建元组的情况下返回多个值/对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789786/

相关文章:

python - 删除重复的行,无论项目订单 Pandas 如何

Python:模拟我正在测试的模块正在使用的模块

python - 使用 psycopg2 访问 Cloud SQL 实例的配置

c - 优化级别打破了 C 代码顺序

c++ - Windows 函数 "GetCursorInfo"返回成功但光标的 HANDLE 为 NULL

c - 如何在结构中对数据进行排序

python - Django - 在保存方法中执行查询

python - QImage 倾斜某些图像,但不倾斜其他图像

c++ - 确定 GetElementPtr 的字节偏移量

c - 使用 C 中的 Do..while 循环登录