[Python-Dev] PEP 3102: Keyword-only arguments
Edward Loper
edloper at gradient.cis.upenn.edu
Mon May 1 19:11:54 CEST 2006
Fredrik Lundh wrote:
>> And again, why would you *make* me, the user-programmer, type
>>
>> make_person(name=namex, age=agex, phone=phonex, location = locationx)
>> #instead of
>> make_person(namex,agex,phonex,locationx)
>> ?
>
> because a good API designer needs to consider more than just the current
> release.
I believe that it's quite possible that you're right, but I think more
concrete answers would be helpful. I.e., how does having parameters
that are syntactically keyword-only (as opposed to being simply
documented as keyword-only) help you develop an API over time?
I gave some thought to it, and can come up with a few answers. In all
cases, assume a user BadUser, who decided to use positional arguments
for arguments that you documented as keyword-only.
- You would like to deprecate, and eventually remove, an argument to
a function. For people who read your documentation, and use
keyword args for the keyword-only arguments, their code will break
in a clean, easy-to-understand way. But BadUser's code may break in
strange hard-to-understand ways, since their positional arguments will
get mapped to the wrong function arguments.
- You would like to add a new parameter to a function, and would like
to make that new parameter available for positional argument use.
So you'd like to add it before all the keyword arguments. But this
will break BadUser's code.
- You have a function that takes one argument and a bunch of keyword
options, and would like to change it to accept *varargs instead of
just one argument. But this will break BadUser's code.
I think that this kind of *concrete* use-case provides a better
justification for the feature than just saying "it will help API
design." As someone who has had a fair amount of experience designing &
maintaining APIs over time, perhaps you'd care to contribute some more
use cases where you think having syntactically keyword-only arguments
would help?
-Edward
More information about the Python-Dev
mailing list