On 4/21/06, Guido van Rossum <[EMAIL PROTECTED]> wrote: > On 4/21/06, Jim Jewett <[EMAIL PROTECTED]> wrote: > > On 4/21/06, Alex Martelli <[EMAIL PROTECTED]> wrote: > > > On 4/21/06, Guido van Rossum <[EMAIL PROTECTED]> 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 _______________________________________________ Python-3000 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com
