使用多个函数参数调用 PyObject_CallObject

bbo*_*577 2 c++ python

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

def multiply(a, b)
    return a * b
Run Code Online (Sandbox Code Playgroud)

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

Bak*_*riu 5

文档

PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args)

返回值:新引用。

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

换句话说:

  • 您可以通过传递一个tuple包含参数的参数来将多个参数传递给函数。因此,您必须构建一个tuple包含xy(即(x, y)),然后将元组作为单个参数传递给PyObject_CallObject(multiply, the_tuple)this 将等效于multiply(x, y).
  • 它并不能代表最一般的呼叫。最通用的调用是PyObject_Call接受两个参数:位置参数的元组和关键字参数的字典。
  • PyObject_CallFunction*有类似的函数,PyObject_CallObject但它们避免了必须创建元组并允许多个参数。