[New-bugs-announce] [issue38560] Allow iterable argument unpacking after a keyword argument?
Brandt Bucher
report at bugs.python.org
Tue Oct 22 20:20:42 EDT 2019
New submission from Brandt Bucher <brandtbucher at 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 <report at bugs.python.org>
<https://bugs.python.org/issue38560>
_______________________________________
More information about the New-bugs-announce
mailing list