[Python-3000] parameter lists [was: Type Expressions]

Jim Jewett jimjjewett at gmail.com
Thu Apr 20 16:20:17 CEST 2006


On 4/20/06, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
> Some wilder ideas for keyword-only arguments:

>    def spam(a, b, c, {d, e, f=x}):
>      # d, e are mandatory keyword-only
>      # f is optional keyword-only

I see several sources of complexity.

Long sequences where order matters are bad, but probably can't be
eliminated.  We have this today.

A rest-of-the-arguments collector is a useful special case.  We have
this today with *.

Arguments which can be either positional or keywords are tricky, but
also useful.  We have this today.

A distinction between expected and unexpected keywords is awkward, but
sometimes useful.  We have this today with **.

Today, we do not have any way to say that a parameter is keyword only
without also marking it unexpected.  This motivates the addition of

    def(pos1, pos2, *args, key1=XXX):

I also see the value of keyword-only arguments without unlimited
positional arguments.  Whether it deserves syntax and what that syntax
should be (such as * or *None)  may need a pronouncement eventually,
but it doesn't have to be complex.

The *new* complexity seems to come almost entirely from trying to
support keyword-only arguments without a default.  I don't think

    (mandatory) + (keyword only) + (no default) + (no sentinel)

is important enough to justify that complexity.

(That said, I would like a better way to tell whether the keyword was
passed explicitly; creating a sentinel outside the function always
seems awkward.)

-jJ


More information about the Python-3000 mailing list