[Python-ideas] Keyword only argument on function call

Anders Hovmöller boxed at killingar.net
Thu Sep 6 22:30:35 EDT 2018



On Thursday, September 6, 2018 at 4:13:45 PM UTC+2, David Mertz wrote:
>
> Steven's point is the same as my impression. It's not terribly uncommon in 
> code I write or read to use the same name for a formal parameter (whether 
> keyword or positional) in the calling scope.  But it's also far from 
> universal.  Almost all the time where it's not the case, it's for a very 
> good reason.
>
> Functions by their nature are *generic* in some sense.  That is, they 
> allow themselves to be called from many other places.  Each of those places 
> has its own semantic context where different names are relevant to readers 
> of the code in that other place.  As a rule, the names used in function 
> parameters are less specific or descriptive because they have to be neutral 
> about that calling context.  So e.g. a toy example:
>
> for record in ledger:
>     if record.amount > 0:
>         bank_transaction(currency=currencies[record.country],
>                          deposit=record.amount,
>                          account_number=record.id)
>
> Once in a while the names in the two scopes align, but it would be code 
> obfuscation to *force* them to do so (either by actual requirement or 
> because "it's shorter").
>

Pythons normal arguments already gives people an option to write something 
else "because it's shorter" though: just use positional style. So your 
example is a bit dishonest because it would be:

        bank_transaction(currencies[record.country],
                         record.amount,
                         record.id)

...in many many or even most code bases. 

And I would urge you to try out my analysis tool on some large code base 
you have access to. I do have numbers to back up my claims. I don't have 
numbers on all the places where the names don't align but would be *better* 
if they did align though, because that's a huge manual task, but I think 
it's pretty obvious these places exists.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20180906/b8331bdd/attachment.html>


More information about the Python-ideas mailing list