[Python-ideas] Keyword only argument on function call
Kyle Lahnakoski
klahnakoski at mozilla.com
Sat Sep 8 13:33:22 EDT 2018
I agree that this is a familiar pattern, but I long since forgot the
specifics of the domain it happens in. I borrowed your code, and added
filename tracking to see what source files had high
`could_have_been_a_matched_kwarg`. Here is the top one:
https://github.com/django/django/blob/master/tests/migrations/test_autodetector.py
The argument-name-matches-the-local-variable-name pattern does appear to
happen in many test files. I assume programmers are more agnostic about
variable names in a test because they have limited impact on the rest of
the program; matching the argument names makes sense.
There are plenty of non-test files that can use this pattern, here are
two intense ones:
https://github.com/django/django/blob/master/django/contrib/admin/options.py
(212 call parameters match)
https://github.com/django/django/blob/master/django/db/backends/base/schema.py
(69 call parameters match)
Opening these in an IDE, and looking at the function definitions, there
is a good chance you find a call where the local variable and argument
names match. It is interesting to see this match, but I not sure how I
feel about it. For example, the options.py has a lot of small methods
that deal with (request, obj) pairs: eg
`has_view_or_change_permission(self, request, obj=None)` Does that mean
there should be a namedtuple("request_on_object", ["request", "obj"]) to
"simplify" all these calls? There are also many methods that accept a
single `request` argument; but I doubt they would benefit from the new
syntax.
On 2018-09-06 06:15, Anders Hovmöller wrote:
> I have a working implementation for a new syntax which would make using keyword arguments a lot nicer. Wouldn't it be awesome if instead of:
>
> foo(a=a, b=b, c=c, d=3, e=e)
>
> we could just write:
>
> foo(*, a, b, c, d=3, e)
>
More information about the Python-ideas
mailing list