[issue28933] AC: Accept None as a Py_ssize_t default value
Julien Palard
report at bugs.python.org
Mon Dec 12 16:31:39 EST 2016
Julien Palard added the comment:
> for just one use case
I don't think that using None in a default argument is "one use case", nor a "special case" it's more like a "widly used pattern" that I'd like to make simple to implement (also see http://bugs.python.org/issue28754#msg282891).
I'm not sure you're against my idea of accepting None like:
something: Py_ssize_t(c_default="-1") = None
Or you're against my implementation, which I can understand, I'm not a fan of modifying getargs.c for this, it may be doable by implementing a new converter in clinic.py like "Py_ssize_t_optional", and it may not require more work than modifying getargs.c.
But AC is already defining 4 different "default values", counting the "= value" from the AC DSL, I'm not sure that adding the "optional" string somewhere make any of this clearer, typically what about the semantic difference between:
something: Py_ssize_t_optional()
and
something: Py_ssize_t() = None
So my original idea was to accept "= None" indistinctly of the used type, I mean allowing:
something: Py_ssize_t(c_default=…) = None
something: float(c_default=…) = None
something: double(c_default=…) = None
…
…
Which is, I think, one of the clearest way to express "It's an optional parameter, on the Python side the default value is None, but c-side the default value is of the right type an is …".
In other words, I'm proposing to optionally extend the "c_default" usage from "not given" to "not given or given None".
I failed to implement if for any types, mainly because AC is delegating to getargs for Py_ssize_t, so I though starting with my specific need (Py_ssize_t for issue28754) was a good start and POC.
Another solution may be to change the Py_ssize_t_converter to drop the format_unit, allowing us to implement the converter in clinic instead of getargs.c. It's opening a long term door of completly dropping non-"O" format units. I mean, if we drop every non-"O" format units in clinic we'll be able to use a faster implementation of _PyArg_ParseStack, one not parsing a mini-arg-definition-language at runtime (the "OO|nO&:").
I'm willing to implement something clean for this but please be more precise in your feedback.
----------
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue28933>
_______________________________________
More information about the Python-bugs-list
mailing list