[Python-Dev] Proposing "Argument Clinic", a new way of specifying arguments to builtins for CPython

Stefan Behnel stefan_ml at behnel.de
Fri Feb 15 20:30:22 CET 2013


Hi,

this reply seems to have drowned, so here it is again.

Stefan Behnel, 04.12.2012 16:36:
> Why not provide a constructor for signature objects that parses the
> signature from a string? For a signature like
> 
>    def func(int arg1, float arg2, ExtType arg3, *,
>             object arg4=None) -> ExtType2:
>        ...
> 
> you'd just pass in this string:
> 
>    (arg1 : int, arg2 : float, arg3 : ExtType, *, arg4=None) -> ExtType2
> 
> or maybe prefixed by the function name, don't care. Might make it easier to
> pass it into the normal parser.
> 
> For more than one alternative input type, use a tuple of types. For builtin
> types that are shadowed by C type names, pass "builtins.int" etc.

This usage of Py3 annotations for typing isn't currently supported by
Cython, but if you'd use the first syntax above, Cython could translate
that into a Python function wrapper (almost) straight away. I wonder if
that wouldn't be a way to make builtins and stdlib extension modules look
and behave more like Python functions, by letting Cython generate their C
wrapping code. The non-trivial signatures would also gain some speed when
being called, e.g. with keyword arguments.

That obviously brings up bootstrapping questions (how to run Cython without
builtins?), but they could be worked around by keeping the current code in
place until the wrappers are generated, and then replace it by them.

Just a thought.

Stefan




More information about the Python-Dev mailing list