I’ve discovered a function in the Python C API named PyEval_CallFunction which seems to be useful. It allows you to invoke a Python callable by saying something like:
PyEval_CallFunction(obj, "OOO", a, b, c);
However, I can’t find any official documentation on this function. A google search brings up various unofficial tutorials which discuss this function, but:
-
The function isn’t
documented in the official
Python docs, so I don’t know if it’s
even something that is supposed to
be part of the public API. -
Searching the web turns up
inconsistent usage policies. Some
tutorials indicate the
format string needs parenthesis
around the type list, like
"(OiiO)", whereas other times I
see it used without the parenthesis.
When I actually try the function in
a real program, it seems to require
the parenthesis, otherwise it
segfaults.
I’d like to use this function because it’s convenient. Does anyone know anything about this, or know why it isn’t documented? Is it part of the public API?
I couldn’t find many references to it either, but the tutorial you linked to mentions this:
I suppose
PyEval_CallFunctionis not public API, as its value seems rather limited. There is not much of a difference between these two. But then again, I’m not really involved in python extensions, so this is just my view on this.PyEval_CallObjectitself is just a macro aroundPyEval_CallObjectWithKeywords.On the matter of “What is public API?” here is a recent message from Martin v. Löwis:
http://mail.python.org/pipermail/python-dev/2011-February/107973.html