I don't think it's possible to make this work reliably. In particular, it's an important feature of python that you can make wrappers that pass through arguments and are equivalent to the original function:
def original(a=0): ... def wrapper(*args, **kwargs): return original(*args, **kwargs) Right now these can be called in exactly the same ways. But with the proposal they would become different: # ok original(***{"a": 1, "b": 2}) # raises TypeError wrapper(***{"a": 1, "b": 2}) The problem is that the extra star gets lost when passing through the wrapper. In this case you might be able to fix this by using functools.wraps to fix up the signature introspection metadata, but that doesn't work in more complex cases (e.g. when the wrapper adds/removes some args while passing through the rest). In Python, signature introspection is a best-effort thing, and IME not super reliable. -n On Fri, Apr 12, 2019, 08:11 Viktor Roytman <viktor.royt...@gmail.com> 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. > _______________________________________________ > Python-ideas mailing list > Python-ideas@python.org > 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/