On 07/09/18 14:59, Anders Hovmöller wrote:
I disagree.  Keyword arguments are a fine and good thing, but they are
best used for optional arguments IMHO.  Verbosity for the sake of
verbosity is not a good thing.


Hmm.. it seems to me like there are some other caveats to your position
here. Like "no functions with more than two arguments!" or similar?

No.

Personally I think readability suffers greatly already at two arguments if
none of the parameters are named. Sometimes you can sort of fix the
readability with function names like do_something_with_a_foo_and_bar(foo,
bar), but that is usually more ugly than just using keyword arguments.

I'd have said three arguments in the general case, more if you've chosen your function name to make it obvious (*not* by that nasty foo_and_bar method!), though that's pretty rare. That said, I don't often find I need more than a few mandatory arguments.

Functions in real code have > 2 arguments. Often when reading the code the
only way to know what those arguments are is by reading the names of the
parameters on the way in, because it's positional arguments. But those
aren't checked. To me it's similar to bracing for indent: you're telling
the human one thing and the machine something else and no one is checking
that those two are in sync.

I'll repeat; surprisingly few of my function have more than three mandatory (positional) arguments. Expecting to understand functions by just reading the function call and not the accompanying documentation (or code) is IMHO hopelessly optimistic, and just having keyword parameters will not save you from making mistaken assumptions.

I have seen beginners try:

def foo(b, a):
     pass

a = 1
b = 2
foo(a, b)

and then be confused because a and b are flipped.

I have seen teachers get their students to do that deliberately, to give them practical experience that the variable names they use in function calls are not in any way related to the names used in the function definition. I've not seen those students make the same mistake twice :-)

I wonder if part of my dislike of your proposal is that you are deliberately blurring that disconnect?

--
Rhodri James *-* Kynesim Ltd
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to