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/