#5417: replace references to undocumented functions by ones to documented functions.
This commit is contained in:
parent
b945bbf33e
commit
c2784229b8
|
@ -465,10 +465,10 @@ reference count of an object and are safe in the presence of *NULL* pointers
|
||||||
(but note that *temp* will not be *NULL* in this context). More info on them
|
(but note that *temp* will not be *NULL* in this context). More info on them
|
||||||
in section :ref:`refcounts`.
|
in section :ref:`refcounts`.
|
||||||
|
|
||||||
.. index:: single: PyEval_CallObject()
|
.. index:: single: PyObject_CallObject()
|
||||||
|
|
||||||
Later, when it is time to call the function, you call the C function
|
Later, when it is time to call the function, you call the C function
|
||||||
:cfunc:`PyEval_CallObject`. This function has two arguments, both pointers to
|
:cfunc:`PyObject_CallObject`. This function has two arguments, both pointers to
|
||||||
arbitrary Python objects: the Python function, and the argument list. The
|
arbitrary Python objects: the Python function, and the argument list. The
|
||||||
argument list must always be a tuple object, whose length is the number of
|
argument list must always be a tuple object, whose length is the number of
|
||||||
arguments. To call the Python function with no arguments, pass in NULL, or
|
arguments. To call the Python function with no arguments, pass in NULL, or
|
||||||
|
@ -484,16 +484,16 @@ or more format codes between parentheses. For example::
|
||||||
...
|
...
|
||||||
/* Time to call the callback */
|
/* Time to call the callback */
|
||||||
arglist = Py_BuildValue("(i)", arg);
|
arglist = Py_BuildValue("(i)", arg);
|
||||||
result = PyEval_CallObject(my_callback, arglist);
|
result = PyObject_CallObject(my_callback, arglist);
|
||||||
Py_DECREF(arglist);
|
Py_DECREF(arglist);
|
||||||
|
|
||||||
:cfunc:`PyEval_CallObject` returns a Python object pointer: this is the return
|
:cfunc:`PyObject_CallObject` returns a Python object pointer: this is the return
|
||||||
value of the Python function. :cfunc:`PyEval_CallObject` is
|
value of the Python function. :cfunc:`PyObject_CallObject` is
|
||||||
"reference-count-neutral" with respect to its arguments. In the example a new
|
"reference-count-neutral" with respect to its arguments. In the example a new
|
||||||
tuple was created to serve as the argument list, which is :cfunc:`Py_DECREF`\
|
tuple was created to serve as the argument list, which is :cfunc:`Py_DECREF`\
|
||||||
-ed immediately after the call.
|
-ed immediately after the call.
|
||||||
|
|
||||||
The return value of :cfunc:`PyEval_CallObject` is "new": either it is a brand
|
The return value of :cfunc:`PyObject_CallObject` is "new": either it is a brand
|
||||||
new object, or it is an existing object whose reference count has been
|
new object, or it is an existing object whose reference count has been
|
||||||
incremented. So, unless you want to save it in a global variable, you should
|
incremented. So, unless you want to save it in a global variable, you should
|
||||||
somehow :cfunc:`Py_DECREF` the result, even (especially!) if you are not
|
somehow :cfunc:`Py_DECREF` the result, even (especially!) if you are not
|
||||||
|
@ -501,7 +501,7 @@ interested in its value.
|
||||||
|
|
||||||
Before you do this, however, it is important to check that the return value
|
Before you do this, however, it is important to check that the return value
|
||||||
isn't *NULL*. If it is, the Python function terminated by raising an exception.
|
isn't *NULL*. If it is, the Python function terminated by raising an exception.
|
||||||
If the C code that called :cfunc:`PyEval_CallObject` is called from Python, it
|
If the C code that called :cfunc:`PyObject_CallObject` is called from Python, it
|
||||||
should now return an error indication to its Python caller, so the interpreter
|
should now return an error indication to its Python caller, so the interpreter
|
||||||
can print a stack trace, or the calling Python code can handle the exception.
|
can print a stack trace, or the calling Python code can handle the exception.
|
||||||
If this is not possible or desirable, the exception should be cleared by calling
|
If this is not possible or desirable, the exception should be cleared by calling
|
||||||
|
@ -513,7 +513,7 @@ If this is not possible or desirable, the exception should be cleared by calling
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
|
|
||||||
Depending on the desired interface to the Python callback function, you may also
|
Depending on the desired interface to the Python callback function, you may also
|
||||||
have to provide an argument list to :cfunc:`PyEval_CallObject`. In some cases
|
have to provide an argument list to :cfunc:`PyObject_CallObject`. In some cases
|
||||||
the argument list is also provided by the Python program, through the same
|
the argument list is also provided by the Python program, through the same
|
||||||
interface that specified the callback function. It can then be saved and used
|
interface that specified the callback function. It can then be saved and used
|
||||||
in the same manner as the function object. In other cases, you may have to
|
in the same manner as the function object. In other cases, you may have to
|
||||||
|
@ -524,7 +524,7 @@ event code, you might use the following code::
|
||||||
PyObject *arglist;
|
PyObject *arglist;
|
||||||
...
|
...
|
||||||
arglist = Py_BuildValue("(l)", eventcode);
|
arglist = Py_BuildValue("(l)", eventcode);
|
||||||
result = PyEval_CallObject(my_callback, arglist);
|
result = PyObject_CallObject(my_callback, arglist);
|
||||||
Py_DECREF(arglist);
|
Py_DECREF(arglist);
|
||||||
if (result == NULL)
|
if (result == NULL)
|
||||||
return NULL; /* Pass error back */
|
return NULL; /* Pass error back */
|
||||||
|
@ -536,19 +536,20 @@ the error check! Also note that strictly speaking this code is not complete:
|
||||||
:cfunc:`Py_BuildValue` may run out of memory, and this should be checked.
|
:cfunc:`Py_BuildValue` may run out of memory, and this should be checked.
|
||||||
|
|
||||||
You may also call a function with keyword arguments by using
|
You may also call a function with keyword arguments by using
|
||||||
:cfunc:`PyEval_CallObjectWithKeywords`. As in the above example, we use
|
:cfunc:`PyObject_Call`, which supports arguments and keyword arguments. As in
|
||||||
:cfunc:`Py_BuildValue` to construct the dictionary. ::
|
the above example, we use :cfunc:`Py_BuildValue` to construct the dictionary. ::
|
||||||
|
|
||||||
PyObject *dict;
|
PyObject *dict;
|
||||||
...
|
...
|
||||||
dict = Py_BuildValue("{s:i}", "name", val);
|
dict = Py_BuildValue("{s:i}", "name", val);
|
||||||
result = PyEval_CallObjectWithKeywords(my_callback, NULL, dict);
|
result = PyObject_Call(my_callback, NULL, dict);
|
||||||
Py_DECREF(dict);
|
Py_DECREF(dict);
|
||||||
if (result == NULL)
|
if (result == NULL)
|
||||||
return NULL; /* Pass error back */
|
return NULL; /* Pass error back */
|
||||||
/* Here maybe use the result */
|
/* Here maybe use the result */
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
|
|
||||||
|
|
||||||
.. _parsetuple:
|
.. _parsetuple:
|
||||||
|
|
||||||
Extracting Parameters in Extension Functions
|
Extracting Parameters in Extension Functions
|
||||||
|
|
Loading…
Reference in New Issue