[Python-ideas] Syntax for allowing extra keys when unpacking a dict as keyword arguments

Viktor Roytman viktor.roytman at gmail.com
Fri Apr 12 13:50:36 EDT 2019


Any time I am using a function from a library that accepts keyword 
arguments. For example, an ORM model constructor that accepts fields as 
keyword arguments (like Django).

On Friday, April 12, 2019 at 12:57:43 PM UTC-4, Rhodri James wrote:
>
> On 12/04/2019 16:10, Viktor Roytman 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. 
>
> What circumstance do you want to do this in that simply passing the 
> dictionary as itself won't do for? 
>
> -- 
> Rhodri James *-* Kynesim Ltd 
> _______________________________________________ 
> Python-ideas mailing list 
> Python... at python.org <javascript:> 
> https://mail.python.org/mailman/listinfo/python-ideas 
> Code of Conduct: http://python.org/psf/codeofconduct/ 
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20190412/a31da40d/attachment.html>


More information about the Python-ideas mailing list