New submission from Brandt Bucher <brandtbuc...@gmail.com>:
Calls of the form f(name=value, *args) are currently legal syntax. The resulting argument binding is awkward, and almost never does what you want/expect it to: >>> def f(x, y, z): ... print(x, y, z) ... >>> f(x=0, *(1, 2)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() got multiple values for argument 'x' >>> f(y=0, *(1, 2)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() got multiple values for argument 'y' >>> f(z=0, *(1, 2)) 1 2 0 I'm not sure if this is intentional, or an oversight. Every other way of passing positional arguments after keyword arguments results in an error: f(kwarg=kwarg, arg) # SyntaxError: positional argument follows keyword argument f(**kwargs, arg) # SyntaxError: positional argument follows keyword argument unpacking f(**kwargs, *args) # SyntaxError: iterable argument unpacking follows keyword argument unpacking I think this case should raise a "SyntaxError: iterable argument unpacking follows keyword argument". I'd like to work on this if we believe it should be changed. ---------- components: Interpreter Core messages: 355195 nosy: brandtbucher priority: normal severity: normal status: open title: Allow iterable argument unpacking after a keyword argument? type: behavior versions: Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue38560> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com