我遇到了以下问题。我已经编写了一个 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/