[Types-sig] Keyword arg declarations

Greg Stein gstein@lyra.org
Fri, 17 Dec 1999 12:04:37 -0800 (PST)


On Fri, 17 Dec 1999, David Ascher wrote:
> From: "Guido van Rossum" <guido@CNRI.Reston.VA.US>
> > I just realized that Tim's decl syntax that's currently being bandied
> > around doesn't declare the names of arguments.  That's fine for a
> > language like C, but in Python, any argument with a name (*args
> > excluded) can be used as a keyword argument.

I responded to this elsewhere; I believe we can easily declare varargs and
keywords with an unambigous syntax.

>...
> An example of such a signature is familiar to all is the signature for
> range().  The docstring for range reads:
> 
> range([start,] stop[, step]) -> list of integers
> 
> which is not expressible with the current syntax.  A Python version of range
> would have to do, much like NumPy's arange does,

I believe it is expressible:

def range(start: Int, stop=None: Int or None, step=1: Int) -> [Int]:
  ...

The only caveat is that somebody could do:

  range(3, None, 1)

Which (technically) is not supposed to be allowed.

>...
> Now, the builtin typechecker can of course be told about __builtin__.range's
> signature peculiarities, but is there any way we can address the more
> general problem?  Or is it, as I suspect, rare enough that one can ignore
> it?

Well, the above isn't necessarily the prettiest, but it *is* possible with
at least one proposal for syntax extensions. I believe this kind of
argument funkiness is pretty rare and we don't need to provide any special
handling or consideration for the problem.

>...
> > (Note that not all builtins support keyword arguments; in fact most
> > don't.)
> 
> And a shame it is, IMO.  Would it make sense to consider for 2.0 a mechanism
> which allows keyword arguments almost by default?  That way I could do

I think the builtins need to start using PyArg_ParseTupleAndKeywords(). I
seem to recall that there have been problems with that function in the
past, but I think they've been cleared up in the 1.5 series. That should
keyword-enable those functions...

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/