[Python-3000] PEP 3102 comments
Baptiste Carvello
baptiste13 at altern.org
Thu May 25 11:42:23 CEST 2006
> > Here's a related but more complicated wish: define a function in such
> > a way that certain parameters *must* be passed as keywords, *without*
> > using *args or **kwds. This may require a new syntactic crutch.
>
> While a number of people have submitted possible use cases for this
> feature, others have challenged the validity of such cases.
>
> At this point, I don't feel that the use cases for part 2 of the PEP are
> as well-understood as the use cases for part 1.
>
maybe those use cases can work without syntactic sugar. With only part 1, you
can already add a manual check if you need:
>>> def myfunction(a1, a2, *forbidden, kw1, kw2):
... assert forbidden is (), "myfunction() takes exactly 2 arguments"
... pass
>>>
If you want to have access to the function itself (to modify the signature), you
can use a decorator:
>>> @forbid('forbidden')
>>> def myfunction(a1, a2, *forbidden, kw1, kw2):
... pass
>>>
(there can be a hook in the function object that @forbid will call, which would
both fix the signature and add the runtime check)
or, some time in the future, a typecheck:
>>> @forbid_moreargs
>>> def myfunction(a1, a2, *forbidden : Forbidden, kw1, kw2):
... pass
>>>
(where Forbidden is a marker object)
As long as we have an agreed upon idiom, it is not really important if it takes
on more line. Personnaly, I find any of those far more explicit that the lone
start thinggy.
Baptiste
More information about the Python-3000
mailing list