使用多个函数参数调用PyObject_CallObject

时间:2015-06-24 14:31:09

标签: python c++

如果我在Python中有这样的函数:

def multiply(a, b)
    return a * b

如果我有两个以上的参数,如果它会给我一个错误,我如何调用PyObject_CallObject?可能有更好的方法从C ++调用函数,但我是Python / C API的新手

1 个答案:

答案 0 :(得分:4)

来自documentation

  

<强> PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args)

     

返回值:新参考。

     

调用可调用的Python对象callable_object,并给出参数   通过元组args 。如果不需要参数,则args可能是NULL。   返回成功调用的结果,或失败时NULL这是   相当于Python表达式callable_object(*args)

换句话说:

  • 您可以通过传递包含参数的单个tuple来向函数传递多个参数。因此,您必须构建包含tuplexy)的(x, y),然后将元组作为单个参数传递给PyObject_CallObject(multiply, the_tuple)将等同于multiply(x, y)
  • 代表最常见的通话。最通用的调用是PyObject_Call,它带有两个参数:位置参数元组和关键字参数字典。
  • 还有PyObject_CallFunction*函数与PyObject_CallObject类似,但它们不必创建元组并允许多个参数。