Я также не смог найти много ссылок на него, но учебник, на который вы ссылались, упоминает это:
Формат строки и следующий
аргументы такие же, как для Py_BuildValue
(ХХХ, так что я действительно должен был описать
что к настоящему времени!). Вызов, такой как
PyEval_CallFunction(obj, "iii", a, b, c);
эквивалентно
PyEval_CallObject(obj, Py_BuildValue("iii", a, b, c));
Полагаю, PyEval_CallFunction
не является публичным API, так как его значение кажется довольно ограниченным. Между этими двумя нет большой разницы. Но опять же, я не особо занимаюсь расширениями Python, так что это мой взгляд на это.
PyEval_CallObject
сам по себе является просто макросом вокруг PyEval_CallObjectWithKeywords
.
#define PyEval_CallObject(func,arg) \
PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
По вопросу "Что такое публичный API?" Вот недавнее сообщение от Мартина против Лёвиса:
Просто чтобы подчеркнуть и поддержать Георгия
объяснение: API не определен
через документацию, но вместо
прежде всего через заголовочные файлы.
Все функции объявлены как PyAPI_FUNC
и не начиная с _Py являются публичными
API. Раньше было много недокументированного API (до 1.4, документации по API вообще не было, только учебник по модулю расширения); В наши дни все больше и больше API документируется.
http://mail.python.org/pipermail/python-dev/2011-February/107973.html