[Python-3000] Pronouncement on parameter lists
Brett Cannon
brett at python.org
Fri Apr 21 22:41:48 CEST 2006
On 4/21/06, Guido van Rossum <guido at python.org> wrote:
> On 4/21/06, Jim Jewett <jimjjewett at gmail.com> wrote:
> > On 4/21/06, Alex Martelli <aleaxit at gmail.com> wrote:
> > > On 4/21/06, Guido van Rossum <guido at python.org> wrote:
> >
> > > > To prevent more abominations like this, let me pronounce that I now
> > > > like the single-star syntax:
> >
> > > > def foo(a, b, *, x=1, y=2): ...
> >
> > > So, what will this syntax signify? If the single-star stands for
> > > "arbitrary positional arguments", how will the body of foo access
> > > them? Sorry if these have been well covered already, but I read back
> > > through this thread and couldn't find them.
> >
> > No, *args stands for arbitrary positional arguments.
> >
> > The unadorned * stands for "anything after this must be passed as a keyword".
> >
> > It has not yet been specified what would happen to additional
> > positional arguments that get passed in anyway. (Swallow or raise an
> > Exception?)
>
> It would be useless to swallow them (*ignored already lets you do that).
>
> > It has not yet been specified whether the keyword-only arguments must
> > each have a default. Most proposals assume not, but then do ugly
> > things to support that assumption. The above suggests
> >
> > def foo(a, b=2, *, x=3, y=4): # OK
> > def foo(a, b=2, *, x, y=4): # not yet decided
>
> I first was gonna say "illegal of course" but on second though the
> feature of having required keyword args is sometimes useful; I believe
> I've coded such a signature myself once or twice out of **kwds and
> lots of checking.
>
> FWIW Talin, if you're writing up a PEP for this, could I ask you to
> also specify a new introspection API? A function foo should have a
> magic attribute foo.__signature__ which provides access to the
> argument names and defaults (and types if in the future we add
> argument declarations). __signature__ objects should be copyable and
> mutable and the attribute should be assignable so that wrapping
> decorators can copy and modify the signature of the wrapped function
> onto the wrapper function (the latter is usually declared as *args,
> **kwds).
>
> (Ideally the __signature__ attribute on a bound method should return
> the unbound method's signature modified to remove 'self'.)
>
I already have a rough draft PEP and implementation for a
__signature__ object from a couple of months ago (sparked my thinking
on __introspects__). I will go ahead and start another email thread
with the PEP so that details can get hashed out on that separately.
> Oh, other standard function attributes probably all ought to be
> renamed from func_whatever to __whatever__. That applies to
> 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc',
> 'func_globals', 'func_name'.
>
That would be nice. Should that be tossed into PEP 3100 for now so it
isn't lost?
-Brett
More information about the Python-3000
mailing list