[Python-Dev] Rough idea for adding introspection information for builtins

R. David Murray rdmurray at bitdance.com
Sun Jul 7 07:25:04 CEST 2013


On Sun, 07 Jul 2013 04:48:18 +0200, Larry Hastings <larry at hastings.org> wrote:
> On 07/07/2013 03:04 AM, Nick Coghlan wrote:
> >
> > On 7 Jul 2013 10:25, "Larry Hastings" <larry at hastings.org 
> > <mailto:larry at hastings.org>> wrote:
> > >>
> > >> group
> > >>>
> > >>> If not None, represents which "optional parameter group" this 
> > parameter belongs to.  Optional parameter groups are contiguous 
> > sequences of parameters that must either all be specified or all be 
> > unspecified.  For example, if a function takes four parameters but the 
> > last two are in an optional parameter group, you could specify either 
> > two or four arguments to that function--it would be illegal to specify 
> > three arguments.  Parameter groups can only contain positional-only 
> > parameters; therefore group will only be a non-None value when kind is 
> > POSITIONAL_ONLY.
> >
> > The "group" attribute sounds reasonable to me, with the proviso that 
> > we use "multiple signature lines" as the way to represent them in 
> > pydoc (rather than inventing a notation for showing them in a single 
> > signature line).
> >
> > It occurs to me that "type" is itself an example of this kind of dual 
> > signature.
> >
> 
> We don't have to invent a notation--because we already have one. It's 
> square brackets enclosing the optional parameter groups.  This is the 
> syntax Guido dictated for Argument Clinic to use in its input DSL back 
> at PyCon US 2013.  And the Python standard library documentation has 
> been using this convention since the 90s. (Admittedly as a documentation 
> convention, not in code.  But what we're talking about is documentation 
> so I claim it's totally relevant.)
> 
> If we combine that with the admittedly-new "/" indicating "all previous 
> parameters are positional-only", which we're also already using in the 
> Argument Clinic input DSL syntax (at your suggestion!), we have a 
> complete, crisp syntax.  I suppose "/" isn't really necessary, the 
> Python documentation has survived without it for a long time.  But I 
> think it'd would be a nice clarification; it would convey that you can't 
> splat in **kwargs into functions specifying it, for example.
> 
> I expect this to be the format of the signature-for-builtins static data 
> too, as well as the Argument Clinic input syntax.  Sure seems like a 
> nice idea to use the same syntax everywhere.  Particularly allowing as 
> how it's so nice and readable.
> 
> 
> An admission: the Python standard library documentation actually uses 
> *both* square-brackets-for-optional-groups and multiple lines. Sometimes 
> even for the same function!  An example:
> 
>     http://docs.python.org/3/library/curses.html#curses.window.addch
> 
> Of the two, I believe the square brackets syntax is far more common.

Sorry to make your life more complicated, but unless I'm misunderstanding
something, issue 18220 (http://bugs.python.org/issue18220) throws another
monkey-wrench in to this.  If I'm understanding this discussion correctly,
that example:

    islice(stop)
    islice(start, stop [, step])

requires the multiple-signature approach.

Note also that the python3 documentation has moved away from the []
notation wherever possible.

--David


More information about the Python-Dev mailing list