summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrés Delfino <adelfino@gmail.com>2018-07-13 12:50:20 (GMT)
committerBerker Peksag <berker.peksag@gmail.com>2018-07-13 12:50:20 (GMT)
commit379e9d639a52766f79c7a206c5096c8333d1896f (patch)
treecfed6e9d6bb00ad60b4f3ae763b3fe040f40bff9
parentd6345def68d3a0227253da26213dadb247f786db (diff)
downloadcpython-379e9d639a52766f79c7a206c5096c8333d1896f.zip
cpython-379e9d639a52766f79c7a206c5096c8333d1896f.tar.gz
cpython-379e9d639a52766f79c7a206c5096c8333d1896f.tar.bz2
bpo-4260: Document that ctypes.xFUNCTYPE are decorators (GH-7924)
-rw-r--r--Doc/library/ctypes.rst20
1 files changed, 19 insertions, 1 deletions
diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst
index edec764..500aad8 100644
--- a/Doc/library/ctypes.rst
+++ b/Doc/library/ctypes.rst
@@ -1025,6 +1025,22 @@ As we can easily check, our array is sorted now::
1 5 7 33 99
>>>
+The function factories can be used as decorator factories, so we may as well
+write::
+
+ >>> @CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))
+ ... def py_cmp_func(a, b):
+ ... print("py_cmp_func", a[0], b[0])
+ ... return a[0] - b[0]
+ ...
+ >>> qsort(ia, len(ia), sizeof(c_int), py_cmp_func)
+ py_cmp_func 5 1
+ py_cmp_func 33 99
+ py_cmp_func 7 33
+ py_cmp_func 1 7
+ py_cmp_func 5 7
+ >>>
+
.. note::
Make sure you keep references to :func:`CFUNCTYPE` objects as long as they
@@ -1577,7 +1593,9 @@ Foreign functions can also be created by instantiating function prototypes.
Function prototypes are similar to function prototypes in C; they describe a
function (return type, argument types, calling convention) without defining an
implementation. The factory functions must be called with the desired result
-type and the argument types of the function.
+type and the argument types of the function, and can be used as decorator
+factories, and as such, be applied to functions through the ``@wrapper`` syntax.
+See :ref:`ctypes-callback-functions` for examples.
.. function:: CFUNCTYPE(restype, *argtypes, use_errno=False, use_last_error=False)