Python’s inspect module allows one to examine the signature of functions, like so:
$ python3 Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import inspect >>> def f(foo=42): ... pass ... >>> print(inspect.signature(f)) (foo=42)
I wanted to use function signature inspection during unit testing of my sysv_ipc
and posix_ipc
modules to ensure that my code matched its documentation.
Unfortunately, inspect doesn’t work with functions written in C, as you can see in the example below that uses math.sqrt()
.
$ python3 Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import inspect >>> import math >>> inspect.signature(math.sqrt) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/inspect.py", line 2055, in signature return _signature_internal(obj) File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/inspect.py", line 1957, in _signature_internal skip_bound_arg=skip_bound_arg) File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/inspect.py", line 1890, in _signature_from_builtin raise ValueError("no signature found for builtin {!r}".format(func)) ValueError: no signature found for builtin <built-in function sqrt> >>>
Since posix_ipc
and sysv_ipc
are written in C, I have to test their functions and methods with keyword arguments by calling each one with each keyword argument specified.