That is certainly an option for functions that you have defined for 
yourself, but generally not an option for a function from a library. I am 
interested in a solution that works in general.

On Friday, April 12, 2019 at 11:48:38 AM UTC-4, Chris Angelico wrote:
>
> On Sat, Apr 13, 2019 at 1:12 AM Viktor Roytman <viktor...@gmail.com 
> <javascript:>> wrote: 
> > 
> > Currently, unpacking a dict in order to pass its items as keyword 
> arguments to a function will fail if there are keys present in the dict 
> that are invalid keyword arguments: 
> > 
> >     >>> def func(*, a): 
> >     ...     pass 
> >     ... 
> >     >>> func(**{'a': 1, 'b': 2}) 
> >     Traceback (most recent call last): 
> >       File "<stdin>", line 1, in <module> 
> >     TypeError: func() got an unexpected keyword argument 'b' 
> > 
> > The standard approach I have encountered in this scenario is to pass in 
> the keyword arguments explicitly like so 
> > 
> >     func( 
> >         a=kwargs_dict["a"], 
> >         b=kwargs_dict["b"], 
> >         c=kwargs_dict["c"], 
> >     ) 
> > 
> > But this grows more cumbersome as the number of keyword arguments grows. 
> > 
> > There are a number of other workarounds, such as using a dict 
> comprehension to select only the required keys, but I think it would be 
> more convenient to have this be a feature of the language. I don't know 
> what a nice syntax for this would be, or even how feasible it is. 
> > 
>
> I'm not 100% sure I understand your proposal, so I'm going to restate 
> it; anywhere that I'm misrepresenting you, please clarify! 
>
> Given this function and this dictionary: 
>
> def func(*, a): 
>     pass 
>
> args = {'a': 1, 'b': 2} 
>
> you want to call the function, passing the recognized argument 'a' the 
> value from the dict, but ignoring the superfluous 'b'. 
>
> Are you able to alter the function? If so, just add kwargs to it: 
>
> def func(*, a, **_): 
>     pass 
>
> and then any unrecognized args will quietly land in the junk dictionary. 
>
> ChrisA 
> _______________________________________________ 
> Python-ideas mailing list 
> python...@python.org <javascript:> 
> https://mail.python.org/mailman/listinfo/python-ideas 
> Code of Conduct: http://python.org/psf/codeofconduct/ 
>
_______________________________________________
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