> On 24 Dec 2018, at 11:21, 李默 <phyl...@163.com> wrote:
> 
> I am having an idea on loosing the argument validity check when passing the 
> function arguments in keyword way. 
> For example:
> -------------------------------
> def f(x, y):
>     print(x, y)
> def call_f():
>     f(x=7, y=9, z=9)
> 
> call_f()
> ------------------------------
> In the current of python, the extra pass of 'z' would let the interpreter 
> raise an exception and stop work.  My idea is that the interpreter need not 
> stop because all the needed args are completely provided.  Of course for this 
> toy example, 'f' can be define as  f(x, y, **kwargs) to achieve the same 
> goal.  However,  essentially it is reasonably to keep interpreter going as 
> long as enough args are passed.  And this modification can bring more freedom 
> of programming. 

Similar features exists in JavaScript (where you can also do the same thing 
with positional arguments), and Clojure to make two. 

I personally think this is extremely bad. This type of behavior can make error 
in your code slip by undetected for a very long time. Let's take a concrete 
example! We have a function:

def foo(*, a, b=3, c):
    ....

People call it like so:

foo(a=7, b=1, c=11)

Now what happens if we rename argument b to q? The above code still runs! It 
just now passes 3 (the default value) to foo instead of the intended 1. 

I hope this example is enough to convince you of the danger of such a feature. 
It's certainly the reason why I think JavaScript and Clojure are terrible when 
it comes to passing arguments :)

Best regards
Anders
_______________________________________________
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