[Python-ideas] Keyword only argument on function call
rhodri at kynesim.co.uk
Fri Sep 7 14:21:59 EDT 2018
Top posting for once, since no one is quoting well in this thread:
Does this in any way answer David's question? I'm serious; you've spent
a lot of words that, as best I can tell, say exactly nothing about how
keyword arguments would help that quadratic function. If I'm missing
something, please tell me.
On 07/09/18 18:17, Robert Vanden Eynde wrote:
> If you want to force using pos args, go ahead and use Python docstring
> notation we'd write def quad(a,b,c, /)
> The names should not be renamed because they already have a normal ordering
> x ** n.
> This notation is standard, so it would be a shame to use something people
> don't use.
> However, I recently used a quad function in one of my uni course where the
> different factors are computed with a long expression, so keyword
> arguments, so I'd call:
> Vout = quad(
> a=... Some long expression
> spanning a lot of lines ...,
> b=... Same thing ...,
> c=... Same thing...)
> Without the a= reminder, one could count the indentation.
> And if you'd think it's a good idea to refactor it like that ...
> a = ... Some long expression
> spanning a lot of lines ...
> b = ... Same thing ...
> c = ... Same thing...
> Vout = quad(a,b,c)
> Then you're in the case of quad(*, a, b, c) (even if here, one would never
> def quad(c,b,a)).
> Wheter or not this refactor is more clear is a matter of "do you like
> functional programming".
> However, kwargs arz more useful in context where some parameters are
> optional or less frequentely used. But it makes sense (see Pep about
> mandatory kwargs).
> Kwargs is a wonderful invention in Python (or, lisp).
> Le ven. 7 sept. 2018 à 18:54, David Mertz <mertz at gnosis.cx> a écrit :
>> Here's a function found online (I'm too lazy to write my own, but it would
>> be mostly the same). Tell me how keyword arguments could help this... Or
>> WHAT names you'd give.
>> 1. def quad(a,b,c):
>> 2. """solves quadratic equations of the form
>> 3. aX^2+bX+c, inputs a,b,c,
>> 4. works for all roots(real or complex)"""
>> 5. root=b**2-4*a*c
>> 6. if root <0:
>> 7. root=abs(complex(root))
>> 8. j=complex(0,1)
>> 9. x1=(-b+j+sqrt(root))/2*a
>> 10. x2=(-b-j+sqrt(root))/2*a
>> 11. return x1,x2
>> 12. else:
>> 13. x1=(-b+sqrt(root))/2*a
>> 14. x2=(-b-sqrt(root))/2*a
>> 15. return x1,x2
>> After that, explain why forcing all callers to name their local variables
>> a, b, c would be a good thing.
>> On Fri, Sep 7, 2018, 12:18 PM Robert Vanden Eynde <robertve92 at gmail.com>
>>>> 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.
>>> I disagree, when you have more than one parameter it's sometimes
>>> complicated to remember the order. Therefore, when you name your args, you
>>> have way less probability of passing the wrong variable, even with only one
>>> Verbosity adds redundancy, so that both caller and callee are sure they
>>> mean the same thing.
>>> That's why Java has types everywhere, such that the "declaration part"
>>> and the "use" part agree on the same idea (same type).
>>> Python-ideas mailing list
>>> Python-ideas at python.org
>>> Code of Conduct: http://python.org/psf/codeofconduct/
Rhodri James *-* Kynesim Ltd
More information about the Python-ideas