[Python-ideas] Default values in multi-target assignment
Serhiy Storchaka
storchaka at gmail.com
Thu Apr 12 05:54:35 EDT 2018
Yet one crazy idea. What if allow default values for targets in
multi-target assignment?
>>> (a, b=0) = (1, 2)
>>> a, b
(1, 2)
>>> (a, b=0) = (1,)
>>> a, b
(1, 0)
>>> (a, b=0) = ()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected at least 1, got 0)
>>> (a, b=0) = (1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected at most 2)
Currently you need either explicitly check the length of the right-hand
part (if it is a sequence and not an arbitrary iterator),
if len(c) == 1:
a, = c
b = 0
elif len(c) == 2:
a, b = c
else:
raise TypeError
or use an intermediate function:
def f(a, b=0):
return a, b
a, b = f(*c)
The latter can be written as an ugly one-liner:
a, b = (lambda a, b=0: (a, b))(*c)
More information about the Python-ideas
mailing list